지침을 가리키는 지침의 작용을 간단히 분석하다.

이 문장 은 주로 지침 을 가리키는 지침 의 일종 의 용법 을 소개한다
그래서 여기는 지침이나 지침을 가리키는 지침, 그들의 기초를 언급하지 않습니다.
직접 코드 (용도: 함수를 사용하여 메모리를 동적 신청하고 값을 부여합니다. 호출 함수를 뛰어넘어 값을 부여하는 내용을 출력합니다)
#include <stdio.h>
#include <stdlib.h>

typedef struct Data
{
	int    da;
} Data;

void fun(Data *p);

int main()
{
	Data    *d;
	fun(d);
	printf("%d", d->da);
	return    0;
}

void fun(Data *p)
{
	p = (Data*)malloc(sizeof(Data));
	p->da = 2;
}

나는 네가 결과를 직접 운행해 보라고 건의한다. 너는 운행이 잘못된 것을 발견할 수 있을 것이다. 여기서 나는 네가 먼저 생각한 다음에 아래를 보는 것을 건의한다
그러면 다음 코드를 다시 한 번 봅시다.
#include <stdio.h>
#include <stdlib.h>

typedef struct Data
{
	int    da;
} Data;

void fun(Data **p);     // 

int main()
{
	Data    *d;
	fun(&d);     // 
	printf("%d", d->da);
	return    0;
}

void fun(Data **p)     // 
{
	(*p) = (Data*)malloc(sizeof(Data));     // 
	(*p)->da = 2;     // 
}

자세히 보면 바뀐 코드가 바늘을 가리키는 바늘을 사용했다는 것을 어렵지 않게 발견할 수 있다
왜 그냥 포인터를 쓰면 안 되지?
첫 번째 코드에서void fun(Data *p)의 매개 변수는 값에 따라 전달되기 때문이다.호출 함수는 임시 변수를 자동으로 정의하여 실참의 복사를 저장합니다.fun에서 동적 분배된 메모리는main 함수에서 바늘 변수 d가 가리키는 것이 아닙니다.main에서 바늘 변수 d는 처음부터 끝까지 정의되지 않았습니다.
어떻게 이 문제를 해결합니까?
지침을 가리키는 지침으로main에서 지침 변수 d의 주소를 전송합니다.이렇게 fun에서 분배된 메모리 공간 주소는 바늘 변수 d에 저장됩니다
여기까지 말하면 지침을 가리키는 지침 중의 한 작용은 말하지 않아도 안다

좋은 웹페이지 즐겨찾기