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的指针现在是一个双向间接指针(它是一个指向缓冲区开头的指针)并且可能导致程序崩溃或其他不良行为。