请大侠指点指点

caikezhan 2010-04-21 03:15:07
int a=1,b=2;
请问 大侠
scanf("%d%d",a,b);和scanf("%d%d",&a,&b);的区别
...全文
90 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2010-04-21
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
caikezhan 2010-04-21
  • 打赏
  • 举报
回复
恩,值没有改变。我们学的时候没有见过这种情况,两年过去了,我以为又出什么新的语法了呢
huanmie_09 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 caikezhan 的回复:]
三楼说法有点不对,我编译,没有出错,能输出结果
[/Quote]
楼主在vs 2008上试试。
地址不能写。

就算不报错,
如你4楼所示的结果,
scanf("%d,%d",a,b);
这样输入是不会改变a和b的值的.
caikezhan 2010-04-21
  • 打赏
  • 举报
回复
三楼说法有点不对,我编译,没有出错,能输出结果
caikezhan 2010-04-21
  • 打赏
  • 举报
回复
int a=1,b=2;

scanf("%d,%d",a,b);
输入:33 44
printf("%d,%d",a,b);
输出:1,2


scanf("%d%d",&a,&b);
输入:33,44
printf("%d,%d",a,b);
输出:33,44


按照1楼的说法,为1,2 的内存单元的值应该变化成33 44啊???为什么不变?
huanmie_09 2010-04-21
  • 打赏
  • 举报
回复
scanf函数就是往第二个参数以后的地址值上写值.
a = 1;
scanf("%d",a);如一楼所说,会试图将输入的内容写到地址为1的空间上。
这是操作系统所保护的范围,因此会报错的.

scanf("%d",&a);这是往变量a的地址上写内容,因此会将a的值改变为输入的格式串能匹配的内容。
pengzhixi 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bitxinhai 的回复:]
int a=1,b=2;
scanf("%d%d",a,b);将数据读取到地址为1,2的内存单元
和scanf("%d%d",&a,&b);将数据读取到a,b内
[/Quote]

up
bitxinhai 2010-04-21
  • 打赏
  • 举报
回复
int a=1,b=2;
scanf("%d%d",a,b);将数据读取到地址为1,2的内存单元
和scanf("%d%d",&a,&b);将数据读取到a,b内

69,371

社区成员

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

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