c语言中 scanf的疑问

我的Coder小屋 2018-04-09 12:03:38
求解!!!
char cChar[10];
scanf("%s",cChar);
这行能理解,数组名代表数组的首地址,可是为什么把上面第二行改成scanf("%s",&cChar);加个取地址符号编译也能通过;有哪位大神能知道这是为什么吗?cChar已经代表首地址了,再加个取地址符是怎么回事?谢谢各位
...全文
651 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-04-09
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
wang0635 2018-04-09
  • 打赏
  • 举报
回复
只要不是解引用、加减,不会有什么严重后果的。不过最好不要靠运气编程
自信男孩 2018-04-09
  • 打赏
  • 举报
回复
引用 3 楼 a34140974 的回复:
[quote=引用 1 楼 cfjtaishan 的回复:] 加上&的操作是有问题的。之所以编译没问题,是因为scanf("%s", 地址);cChar和&nChar都是地址值,因此编译没问题。 但是运行就会有问题。因为&nChar和nChar还是有区别的。nChar是10个char空间的首地址。而&nChar是首地址的地址。
[/quote] 地址是一样的,但是类型不一样。nChar的类型和&nChar的类型不一样。&nChar的类型是char (*)[10];
AlbertS 2018-04-09
  • 打赏
  • 举报
回复
引用 楼主 qq_36744540 的回复:
求解!!! char cChar[10]; scanf("%s",cChar); 这行能理解,数组名代表数组的首地址,可是为什么把上面第二行改成scanf("%s",&cChar);加个取地址符号编译也能通过;有哪位大神能知道这是为什么吗?cChar已经代表首地址了,再加个取地址符是怎么回事?谢谢各位
编译不会有错,运行也应该没问题,但是加不加&的对于cChar来说是不同的,就像1楼所说,cChar的类型是Char*,&cChar的类型是char (*)[10]
月凉西厢 2018-04-09
  • 打赏
  • 举报
回复
引用 1 楼 cfjtaishan 的回复:
加上&的操作是有问题的。之所以编译没问题,是因为scanf("%s", 地址);cChar和&nChar都是地址值,因此编译没问题。
但是运行就会有问题。因为&nChar和nChar还是有区别的。nChar是10个char空间的首地址。而&nChar是首地址的地址。

月凉西厢 2018-04-09
  • 打赏
  • 举报
回复
char a[10] = { 'a' }; printf("%d\n", a); printf("%d\n", &a); 输出是一样的。
自信男孩 2018-04-09
  • 打赏
  • 举报
回复
加上&的操作是有问题的。之所以编译没问题,是因为scanf("%s", 地址);cChar和&nChar都是地址值,因此编译没问题。 但是运行就会有问题。因为&nChar和nChar还是有区别的。nChar是10个char空间的首地址。而&nChar是首地址的地址。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧