지침을 가리키는 지침의 작용을 간단히 분석하다.
1366 단어 포인터포인터를 가리키는 포인터
그래서 여기는 지침이나 지침을 가리키는 지침, 그들의 기초를 언급하지 않습니다.
직접 코드 (용도: 함수를 사용하여 메모리를 동적 신청하고 값을 부여합니다. 호출 함수를 뛰어넘어 값을 부여하는 내용을 출력합니다)
#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에 저장됩니다
여기까지 말하면 지침을 가리키는 지침 중의 한 작용은 말하지 않아도 안다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어로 2차원 문자열 배열을 함수에서 반환하는 방법c 언어를 사용하고 2차원 문자열 배열을 함수에서 main 함수로 반환하는 방법에 대한 메모를 남겨 둡니다. ※포인터 초보자이므로, 설명이 잘못되어 있으면 지적 부탁합니다. paiza.io에서 실행해 보면 아래와 같...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.