이 코드를 작성하는 데 오랜 시간을 보냈을 때 누군가가 함수에 대한 인수로 문자열에 대한 포인터를 전달할 때 왜 2 별이 필요한지 설명 할 수 있습니까? ? 포인터는 정의에 따라 특정 변수가 배치 될 메모리에 주소를 유지합니다. 그래서 그것은 자신의 주소를 가지고 있고이 주소 아래에 다른 변수에 대한 주소 인 변수입니다. 괜찮아. 따라서 함수에 포인터를 전달하면 포인터 주소를 함수에 전달해야하므로 앰퍼샌드를 사용합니다. 벌금. 그런데 어떻게됩니까? 이 함수는 메모리에서이 포인터에있는 정보를 수신합니다. 괜찮아. 이것은 내가 이해하는 것입니다. 내가 이해할 수없는 것은 내가 왜 함수와 그것의 주장을 정의 할 때 두 개의 별이 필요한지입니다. char 변수에 대한 포인터를 전달하고 있습니다. 왜 void wpisuj (char * w)를 사용하지 않을까요? 왜 wpisuj (char ** w)입니까? 메모리 할당이 이해할 수있다 - 나는 malloc을 가진 메모리를 예약했고 malloc은이 메모리의 주소를 반환한다. 그래서 나는이 주소를 변수 w의 값으로 둔다. 그리고 * w가 포인터이고 메모리에 새로 생성 된 장소의 주소를 유지한다면 * w를 사용하여 왜 거기에 문자열을 넣을지 모르겠다. * (* w)가 아니어야합니까? * w는 예약 된 메모리의 주소이므로 * (* w)는이 메모리의 내용입니다.왜 포인터에 문자열을 함수에 전달할 때
요약. 왜 내가 이해가 안 돼요 : 1) wpisuj (char * w) 대신 wpisuj (char * w) 2) strcpy ( (* w), bufor) 대신 strcpy (w, bufor) 이유가
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
# define SIZE 256
void wpisuj(char** pw){
char bufor[256];
scanf("%s", bufor);
int l;
l=strlen(bufor)+1;
*pw=(char*)malloc(l*sizeof(char));
strcpy(*pw, bufor);
}
int main(){
char* w;
wpisuj(&w);
printf("%s", w);
return 0;
}
그리고 메모리를 확보 해달라고 요청할 수도 있습니다.
int main(){
w=malloc(sizeof(buffer)+sizeof(char));
/* some code before */
free(w);
}
두 개의 별은 포인터에 대한 포인터이기 때문에 .... – duffymo
'*'= pointer. '**'= 포인터에 대한 포인터. 그게 전부 야 –
함수에서 다른 변수 이름을 사용하면 도움이 될 것입니다.함수의'w'는 main의'w'에 대한 포인터입니다. 아마도 그것을'pw'라고 부르면됩니다. 함수에서'* pw'는 main에서'w'와 같은 변수를 의미합니다. –