正如标题所说,我总是想知道为什么scanf
必须使用address of
运算符(&)。
答案 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()处理(&)运算符。