2017-10-12 5 views
-5

scanf가 포인터 인수를 취합니다. 포인터 변수를 전달할 수없는 이유는 무엇입니까?초기화하지 않고 포인터로 scanf를 사용하는 것이 잘못된 이유는 무엇입니까?

int* x; 
scanf("%d", x); 
printf("%d", *x); 

이것은 출력을 제공하지 않습니다. 이유는 무엇입니까? 뭐가 잘못 되었 니? scanf

+4

는 초급 수준의 C 책을 읽어 보시기 바랍니다. 먼저 변수를 초기화해야합니다 ... – Lundin

+0

감사합니다 ... 포인터가 먼저 값을 가져야합니다 ... 이제 작동합니다 .. int a = 0; int * x = & a; scanf ("% d", x); printf ("% d", * x); – EarlyManX215

답변

1

%d 형식 지정자는 int에 대한 포인터를 기대, 즉 당신이 전달하는 것입니다 int *. 그래서 함수를 올바르게 호출하고 있습니다.

어디에 잘못 되었습니까? x 포인터는 초기화되지 않았으므로 아무데도 가리 키지 않습니다. scanf은이 단위 화 된 값을 주소로 읽은 다음 그 가짜 주소에있는 것을 읽습니다. 초기화되지 않은 값을 읽으면 undefined behavior이 호출됩니다.

int 변수의 주소를 할당하거나 malloc을 사용하여 메모리를 동적으로 할당하여 어딘가에 x 지점을 지정해야합니다.

int a; 
int *x = &a; 

또는 :

int *x = malloc(sizeof(int));