C:为什么没有&;对于scanf()函数中的字符串?

C:为什么没有&;对于scanf()函数中的字符串?,c,string,scanf,C,String,Scanf,可能重复: 在C语言中,当我们使用scanf()函数获取用户输入时,我们总是在变量前面使用&符号。 例如: scanf("%d", &number); scanf("%c", &letter); 这确保了我们的输入存储在正确的地址中。但对于字符串,我们不使用& 为什么会这样?C中的“字符串”是字符缓冲区的地址。 您希望scanf填充变量所指向的缓冲区中的内存 相反,int是内存块,而不是地址。为了让scanf填满该内存,您需要传递其地址。因为标识符buf位于char-

可能重复:

在C语言中,当我们使用
scanf()
函数获取用户输入时,我们总是在变量前面使用
&
符号。 例如:

  scanf("%d", &number);
  scanf("%c", &letter);
这确保了我们的输入存储在正确的地址中。但对于字符串,我们不使用
&

为什么会这样?

C中的“字符串”是字符缓冲区的地址。
您希望
scanf
填充变量所指向的缓冲区中的内存


相反,
int
是内存块,而不是地址。为了让
scanf
填满该内存,您需要传递其地址。

因为标识符
buf
位于
char-buf[512]中
降级为指向数组第一个元素的指针,您不需要在
scanf
的参数中指定指向缓冲区的指针。通过传递
&buf
传递到scanf的指针现在是一个双重间接指针(它是指向缓冲区开头的指针),可能会导致程序崩溃或其他不良行为