scanf给数组赋值的时候要不要加上取址符&?

我记得不要加,但是我下午写代码的时候,没加取址符号,编译运行之后,用scanf给数组赋值之后,程序崩溃了。于是我又加上了&,就不崩溃了。这是为什么?到底什么时候加,什么时候不要加?

如果不是数组名,就要加&,如果是数组名,就不要,因为数组名就是首地址
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-02-23
int a[10];

char b[10];

其中a的类型是const int * 常量整形指针

其中b的类型是const char *常量字符指针,二者都是指针。

我猜想你的疑惑在于:scanf("%d", &a[0]); scanf("%s", b);

这是对于scanf的实现问题了,对于%s输入的是字符串,是一串字符。

而%d则输入的仅仅是一个字符。

如果想在b[0]输入一个字符的话, 那么也需要:scanf("%c", &b[0]);

所以综上所述:

对于数组的单个元素输入的时候,a[0], b[0]都需要加&

(其实scanf的输入参数都应该是 地址)

2. scanf对于字符串的输入有了特权,允许通过%s输入多个字符
相似回答