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

时间:2010-10-08 19:16:41

标签: c scanf addressof

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

6 个答案:

答案 0 :(得分:26)

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

答案 1 :(得分:12)

scanf不接受“运营商地址(&)”。需要指针。大多数情况下,通过在scanf调用中使用address-of运算符来获取指向输出变量的指针,例如

int i;
scanf("%i", &i);
printf("number is: %d\n", i);

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

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

所以:

int i;
int iPtr = &i;
scanf("%i", iPtr);
printf("number is: %d\n", i);

答案 2 :(得分:7)

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

答案 3 :(得分:2)

其他人都很好地描述了sscanf需要将其输出放在某处,但为什么不返回呢?因为它必须返回许多东西 - 它可以填充多个变量(由格式驱动)并返回一个int,表示它填充了多少变量。

答案 4 :(得分:1)

当您使用标准输入设备(通常是键盘)输入内容时,通过的数据必须在某处stored。您必须point在内存中的某个位置,以便可以将数据存储在那里。要point内存位置,您需要该位置的address。因此,您必须使用&运算符scanf()传递变量的地址。

答案 5 :(得分:1)

因为值将被存储在(其中?),在内存地址中。所以scanf()处理(&)运算符。