C语言中int数组为什么不可以不要取地址符,字符数组就可以呢?数组名就是一个地址为什么还要取地址
展开全部
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输入多个字符
追问
那就是如果只输入一个字符都要加&,用%s输入字符串就不用加了,加了是不是会出错啊
追答
是的,上面说到scanf的输入参数都应该是 地址,而输入就是往这个地址指向的那块内存进行输入。
输入字符串时,本身b就是指针(地址)了:const char *类型,如果再取地址它的类型就变了,会如果b是数组char b[10]的话,那么取地址之后类型就变成了 char (*)[10]. 这是二级指针,不应该接收字符串的输入。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询