C:为什么没有&for scanf()函数中的字符串?
可能重复:
为什么scanf不需要字符串的&符号,也适用于printf(在C中)?
在C中,当我们使用scanf()
函数获取用户输入时,我们总是在变量前使用&
符号。 例如:
scanf("%d", &number); scanf("%c", &letter);
这可确保我们的输入存储在适当的地址中。 但是如果是字符串,我们不使用&
。
这是为什么?
C中的“字符串”是字符缓冲区的地址。
您希望scanf
填充缓冲区中的内存,该内存由变量指向。
相反, int
是一块内存,而不是一个地址。 为了使scanf
填充该内存,您需要传递其地址。
由于char buf[512];
的标识符buf
char buf[512];
降级为指向数组的第一个元素的指针,您不需要在scanf
的参数中指定指向缓冲区的指针。 通过传递&buf
传递给scanf的指针现在是一个双向间接指针(它是一个指向缓冲区开头的指针)并且可能导致程序崩溃或其他不良行为。