70,037
社区成员
发帖
与我相关
我的任务
分享




。我还分析了半天它的赋值规律呢
那么,问题来了。如果使用 ch='xxx' 的赋值会不会对栈上其他变量的值进行非法修改呢?
我测试了一下好像是不会修改栈上其他变量的值,应该是char类型在地址解析时只按照char的方式只解析了一个字节。
不知道我这样理解对不对。
[/quote]你的图画错了
是char str = '0123'
单引号 [/quote]
好吧,我会错意了。刚开始你回复的是 存储'0123'字符串,我以为你说的是字符串的存储方式,所以我说咋想都不对。其实你说的是单个字符的存储方式吧。
这个我知道,就像 char ch = '0123' 。因为是采用小端存储方式,先存储低位,把3存储到ch,然后因为ch是char类型所以只能容纳一个字节,然后就存储了一个字节,因此 ch = '3' 。
在比如,存放int类型,int a = 10; ,
十进制10的16进制为 0x0000 000A,用小端的方式存先存低位的 0A,然后存00 00 00。
如果我们把a强转修改其中的数值,就能验证。
int a = 10; // 0x0000 000A
修改a的第一字节的数据。
*(char*)&a = 1; // 0x0000 0001 可以看到,我们修改的第一字节的数据,却把低位的 0A修改成了 01
修改第四字节的数据。
*((char*)&a+3) = 1; // 0x0100 0001 可以看到,我们修改第四字节的数据,却把高位的00 修改成了 01.
你看是不是这个意思。
[/quote]你的图画错了
[/quote]str的值是一个溢出结果