为什么scanf()需要&运营商(地址)在某些情况下,而不是其他情况?

pra*_*nay 4 c arrays scanf ampersand

为什么我们需要将一个&运算符scanf()用于存储整数数组中的值,而不是将字符串存储在char数组中?

int a[5];
for(i=0;i<5;i++)
scanf("%d",&a[i]);
Run Code Online (Sandbox Code Playgroud)

char s[5]; scanf("%s",s);
Run Code Online (Sandbox Code Playgroud)

我们需要传入存储值的地址,因为数组是指向第一个元素的指针.所以在int/float数组的情况下,它基本上就意味着(a+i).

但是字符串的情况怎么样?

Sco*_* M. 5

scanf接受指向您放置值的任何内容的指针.在第一个实例中,您将对整数数组中位置i处的特定int传递引用.在第二个实例中,您将整个数组传递给scanf.在C中,数组指针是同义的,可以互换使用(有点).变量s实际上是一个指向内存的指针,该内存具有5个字符的连续空间.