为什么scanf必须采用运算符的地址

Waz*_*ery 9 c scanf addressof

正如标题所说,我总是想知道为什么scanf必须采取address of运算符(&).

Mic*_*urr 26

因为C只有"pass-by-value"参数,所以要传递一个'变量'来放入一个值,你必须传递它的地址(或指向变量的指针).


And*_*ico 11

scanf不接受"运算符(&)的地址".它需要一个指针.通常,通过在scanf调用中使用address-of运算符来获取指向输出变量的指针,例如

int i;
scanf("%i", &i);
printf("number is: %d\n", i);
Run Code Online (Sandbox Code Playgroud)

但这不是唯一的方法.以下内容同样有效:

int* iPtr = malloc(sizeof(int));
scanf("%i", iPtr);
printf("number is: %d\n", *iPtr);
Run Code Online (Sandbox Code Playgroud)

所以是:

int i;
int iPtr = &i;
scanf("%i", iPtr);
printf("number is: %d\n", i);
Run Code Online (Sandbox Code Playgroud)


Nik*_*sov 7

因为它需要地址来放置它读取的值.如果将变量声明为指针,则scanf不需要&.