admin管理员组文章数量:1122920
scanf(“%3c%3c“, a, b)
问题
在书中看到这样的描述:
我们按照这个来操作一下:
跟我们期望中有点不一样,我们希望他的结果是:a = a b = d
,为什么会这样呢 ?
解答
这跟a b
在内存中的地址是有关的
我们先看一下a b
的地址:
a
的地址值比b
的大,说明a
的地址在b
的后面,
也就是&a = &b + 1
(&
是取址符);
a b
的位置如下图所示,一个地址(1个字节)存一个字符:
把字符读进a的时候
从左到右读入:
分别将字符a, b, c
写进~cc,~cd,~ce
里面
把字符读进b的时候
也是从左到右读入
分别将字符d, e, f
写进~ca,~cb,~c
c里面。
注意!
原本地址~cb
里面的a
被新写入的e
覆盖
原本地址~cc
里面的b
被新写入的f
覆盖
打印a、b
因为char a
的地址是~cb, ~cb
里面现在是e
而char b
的地址是~ca, ~ca
里面现在是d
所心输出当然是:
a = e b = d
也可以验证一下,输出a
地址右边那个地址里面的数,理论上应该是f
本文标签: scanf(“3c3c“Ab)
版权声明:本文标题:scanf(“%3c%3c“, a, b) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1702245026a564303.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论