抗癌网,内容丰富有趣,生活中的好帮手!
抗癌网 > java的 %3c%3c 运算符_scanf(%3c%3c a b)

java的 %3c%3c 运算符_scanf(%3c%3c a b)

时间:2018-10-08 17:58:26

相关推荐

java的 %3c%3c 运算符_scanf(%3c%3c  a  b)

问题

在书中看到这样的描述:

我们按照这个来操作一下:

代码

#include

int main(int argc, char const *argv[])

{

char a, b;

scanf("%3c%3c\n", &a, &b);

printf("a = %c b = %c\n", a, b);

return 0;

}

输入:

abcdefg

输出:

a = e b = d

跟我们期望中有点不一样,我们希望他的结果是:a = a b = d,为什么会这样呢 ?

解答

这跟a b在内存中的地址是有关的

我们先看一下a b的地址:

#include

int main()

{

char a, b;

printf("a = %p\nb = %p\n", &a, &b);

return 0;

}

输出:

a = 0x7ffeebfb5bcb

b = 0x7ffeebfb5bca

a的地址值比b的大,说明a的地址在b的后面,也就是&a = &b + 1(&是取址符);

a b的位置如下图所示,一个地址(1个字节)存一个字符:

a b的位置示意

把字符读进a的时候

从左到右读入:

读入a

分别将字符a, b, c写进~cc,~cd,~ce里面

把字符读进b的时候

也是从左到右读入

读入b

分别将字符d, e, f写进~ca,~cb,~cc里面。

注意!

原本地址~cb里面的a被新写入的e覆盖

原本地址~cc里面的b被新写入的f覆盖

打印a、b

因为char a的地址是~cb, ~cb里面现在是e

而char b的地址是~ca, ~ca里面现在是d

输出结果

所心输出当然是:

a = e b = d

也可以验证一下,输出a地址右边那个地址里面的数,理论上应该是f

#include

int main(int argc, char const *argv[])

{

char a, b;

scanf("%3c%3c\n", &a, &b);

printf("a = %c b = %c a右边那个字符是:%c\n", a, b, *(&a + 1));

return 0;

}

输出结果:

a = e b = d a右边那个字符是:f

没错,就是这样。

如果觉得《java的 %3c%3c 运算符_scanf(%3c%3c a b)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。