scanf变量类型的问题

请问scanf("%s", s)不用&,但是scanf("%d", &n);就需要&,那么别的变量类型呢?

因为字符数组已经是指针了,所以不需要取地址,如果是别的变量,都需要。如果这个类型本身是指针,就不需要

比如
int i;
int * p = &i;
scanf("%d", p);

scanf函数的一般形式为:
scanf(“格式控制字符串”, 地址表列);
所以,它需要地址。对于变量,看它是否是地址?如果不是,则需要取地址符,如:&。

scanf(“格式控制字符串”, 地址表列);
地址列表的不同表示

c语言规定数组名就是地址,所以如果s是数组名,或者是指针,那么
scanf("%s",s); 就可以了,s就是地址,不用在加&