아래 코드의 출력을 이해하는 데 도움이 필요합니다. (이것은 숙제가 아닌 중간 고사를위한 샘플 질문 일뿐입니다.) 내가 코드를 통해 갔다포인터를 사용하여 출력 결정
#include <stdio.h>
void figure_me_out(int* a, int b, int c, int* d);
int main(void) {
int var1 = 1, var2 = 10, var3 = 15, var4 = 20;
figure_me_out(&var1, var2, var3, &var4);
printf("%d, %d, %d, %d\n", var1, var2, var3, var4);
return 0;
}
void figure_me_out(int* a, int b, int c, int* d) {
c = b;
b = *d;
*a = 222;
*d = 100;
a = d;
*a = c;
}
출력
222, 10, 15, 10
, 나는이 내 논리였다 100, 10, 10, 15를 가지고 :
C = 10 ---> C였다 값으로 전달되었으므로 printf에 대해 c가 변경되지 않습니다.
b = 20 ---> 위의 이유와 동일
* a = 222 ---> 이것은 a를 역 참조하고 222의 값을 제공합니다. var a가 전달되었으므로 참조로 원래 값을 변경합니다.
위와 (I는 혼란스러워 일부인)
* D = 100 ---> 동일한 이유 A = 100 ---> I는 생각하고 그 D가 100로 변경 한 이후, 즉 a가 현재 d와 같은 값이 100으로 지정됩니다.
* a = 10 ---> a의 값을 10으로 변경
이 함수는 b (var2)의 원래 값을 변경하지 않았으며 c (var3) 값으로 전달되었으므로 나머지는 변경되었습니다. a = d;
: 왜 222 인쇄 및 var4 인쇄를 VAR1에 그래서 나는 10
C는 참조 전달을 지원하지 않습니다. 그것은 엄격하게 가치에 의한 것입니다. 포인터는 참조가 없으며, 예를 들어. 'int'. – Olaf