c和&c的问题

smilewindy 2007-03-15 11:25:29
有定义语句:int b;char c[10]; ,则正确的输入语句是
A)scanf("%d%s",&b,&c);
B)scanf("%d%s",&b,c);

老谭的书上写了A答案是错误的,但是用VC,TC等编译工具运行都没有错误,而且结果都一样,c和&c是一个地址。

为什么?
...全文
325 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
p_zyh 2007-03-16
  • 打赏
  • 举报
回复
对于char a[10]这样的数组类型
虽然a可以当作指针来用,表示该数组的首地址
但实际上并没有一个存储区域来保存这一地址
所以对a取地址得到的还是数组的首地址
而char* p = a;就实实在在的分配了一段存储空间来保存地址
所以对p取地址就可以得到该存储空间的地址
todototry 2007-03-16
  • 打赏
  • 举报
回复
mark
crazy_liu 2007-03-16
  • 打赏
  • 举报
回复
同上
不过,个人觉得还是规范些好,虽然其他的不一定错
Cnwanglin 2007-03-16
  • 打赏
  • 举报
回复
楼上的非常有才
晨星 2007-03-15
  • 打赏
  • 举报
回复
你可以认为“c”跟“char* p”是同一个级别的,而“&c”跟“char (*p)[10]”是同一个级别的。
是啊,同一个地址对scanf来说效果就没啥区别。
smilewindy 2007-03-15
  • 打赏
  • 举报
回复
&c是什么类型?

既然c和&c是一个地址,那么scanf函数就可以scanf("%s",&c);这么写了?
晨星 2007-03-15
  • 打赏
  • 举报
回复
这个。。。。
c和&c的地址的值是一样的,不同的仅仅是类型。而scanf这种变参函数,本来就不太在乎地址的类型的。

比如,你还可以让它更变态一点:
char c[10];
shrt* p = (short*)c;
scanf("%s", p);
printf("%s\n", c);
答案还可能还是对的。
jiarusun000 2007-03-15
  • 打赏
  • 举报
回复
个人认为,A和B无非就是多了个&吗?错误到不至于,就是多余,既然C是数组的首地址,所以没必要加&.
  • 打赏
  • 举报
回复
printf("a: %d:%d\n", a, &a);//a[]的首地址:a[]的首地址
printf("p: %d:%d\n", p, &p); //p中的内容(a[]的首地址):指针变量p本身的地址

不知对不对
darkrainbow 2007-03-15
  • 打赏
  • 举报
回复
楼上的就不对了 &p 就是指针p的地址, p是指向a的指针
p 和 &p当然不同 了
smilewindy 2007-03-15
  • 打赏
  • 举报
回复
有这样一个程序
#include <stdio.h>

main(){

char a[] = "12345";
char *p = a;

printf("a: %d:%d\n", a, &a);
printf("p: %d:%d\n", p, &p);
}
我机器上结果是
a: 1245048:1245048
p: 1245048:1245044



69,381

社区成员

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

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