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

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

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

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); 

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

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

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

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