C 언어 에서 포인터 변수 에 대한 구덩이
typedef struct LNode{ //
int data;
struct LNode *next;
}LNode,*LinkList;
예 1.잘못된 방법:선두 결점 의 단일 체인 표를 초기 화 합 니 다.
void InitList(LinkList L)
{
L = (LinkList)malloc(sizeof(LNode));
L->data = 3;
L->next = NULL;
}
void Empty(LinkList L)
{
if(NULL == L)
{
printf("
");
}
else if(NULL == L->next)
{
printf("
");
}
}
int main()
{
LNode p;
p.data = 2;
printf("p.data = %d
",p.data);
LinkList L = NULL;
InitList(L);
printf("L->data = %d
",L->data);
return 0;
}
출력 결과p.data = 2
링크 가 존재 하지 않 음
예 2.정확 한 방법:선두 결점 의 단일 체인 표를 초기 화 합 니 다.
void InitList(LinkList *L)
{
(*L) = (LinkList)malloc(sizeof(LNode));
(*L)->data = 3;
(*L)->next = NULL;
}
void Empty(LinkList L)
{
if(NULL == L)
{
printf("
");
}
else if(NULL == L->next)
{
printf("
");
}
}
int main()
{
LNode p;
p.data = 2;
printf("p.data = %d
",p.data);
LinkList L = NULL;
InitList(&L);
printf("L->data = %d
",L->data);
return 0;
}
출력 결과p.data = 2
빈 시계
L->data = 3
왜 첫 번 째 InitList(LinkList L)함수 가 단일 링크 L 을 초기 화 할 수 없 습 니까?주소 로 전달 하 는 거 아니에요?
답:
문 제 는 L=(LinkList)malloc(sizeof(LNode)이다.
이곳 의 L 은 InitList 함수 의 형 삼,즉 국부 변수 로 함수 운행 이 끝 난 후에 존재 하지 않 습 니 다.
main 함수 의 L 포인터 변 수 는 실제 전역 변수 에 저 장 된 것 이 고 두 L 은 같은 L 이 아 닙 니 다.
예 1 에서 main 함수 의 LinkList L 은 처음에 NULL 을 가 리 켰 습 니 다.
InitList(L)가 실 행 될 때 부터 InitList 함수 에서 도 L 을 작 동 하지만 이때 의 L 은 InitList 함수 에서 의 형 삼 L 이 고 그 다음 에 도 형 삼 에 대한 조작 입 니 다.다음 그림 과 같 습 니 다.
예 1 에서 들 어 온 것 은 LinkList 변수 L 로 1 급 포인터 에 속 합 니 다.실제 포인터 변수 L 자 체 를 조작 할 수 없습니다.실제 인삼 L 의 값 을 수정 하여 L 이 새로 분 배 된 LNode 를 가리 키 기 때문에 실제 인삼 L 은 NULL 을 가리 킵 니 다.출력 결과 가'링크 가 존재 하지 않 습 니 다'이기 때 문 입 니 다.
예 2 에서 LinkList 변수의 포인터&L 이 들 어 옵 니 다.2 급 포인터 에 속 합 니 다.실제 포인터 변수 L 자 체 를 조작 하여 실제 인삼 L 의 값 을 수정 하여 L 이 새로 분 배 된 LNode,(*L)=(LinkList)malloc(sizeof(LNode)를 가리 키 도록 합 니 다.
총결산
C 언어 에서 포인터 변수 구덩이 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 포인터 변수 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.