C语言中int数组为什么不可以不要取地址符,字符数组就可以呢?数组名就是一个地址为什么还要取地址

 我来答
寒寒家
2015-01-12 · TA获得超过2921个赞
知道大有可为答主
回答量:1482
采纳率:100%
帮助的人:1991万
展开全部

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]);


所以综上所述:

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

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

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

追问
那就是如果只输入一个字符都要加&,用%s输入字符串就不用加了,加了是不是会出错啊
追答
是的,上面说到scanf的输入参数都应该是 地址,而输入就是往这个地址指向的那块内存进行输入。

输入字符串时,本身b就是指针(地址)了:const char *类型,如果再取地址它的类型就变了,会如果b是数组char b[10]的话,那么取地址之后类型就变成了 char (*)[10]. 这是二级指针,不应该接收字符串的输入。
萧竣闰
2015-01-12 · TA获得超过893个赞
知道小有建树答主
回答量:685
采纳率:81%
帮助的人:198万
展开全部
无论int数组还是字符数组,数组名都代表该数组首地址
更多追问追答
追答
无论int数组还是字符数组,数组名都代表该数组首地址
追问
那为什么,字符数组不要取地址符是对的,int数组就是错的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式