- 论坛徽章:
- 2
|
本帖最后由 OwnWaterloo 于 2012-04-25 16:40 编辑
cjacker_cu 发表于 2012-04-25 13:40 ![]()
我觉得C就两种类型,内存的地址和内存内容。
如果这样的话,怎么解释下面这些代码?
- char r0[sizeof(int)], r1[sizeof(int)];
- int const v = 12;
- int x = v;
- memcpy(r0, &x, sizeof r0);
- *(int*)&x = v;
- memcpy(r1, &x, sizeof r1);
- assert( memcmp(r0, r1, sizeof r0) == 0 );
- *(float*)&x = v; // 假设int与float等长, sizeof(int)==sizeof(float)
- memcmp(r1, &x, sizeof r1);
- memcmp(r0, r1, sizeof r0) == 0?
复制代码 内存地址都是&x, 内容都是 [(char*)&x, (char*)&x + sizeof(int) )。
为什么同样都是写入v, 1) x = v; 2) *(int*)&x = v; 3) *(float*)&x = v;
而1)与2)会向 &x 写入相同的内容, 但 3) 就不一定会?
读取也是同样。是什么什么概念导致对[(char*)&x, (char*)&x + sizeof(int) )的解释(interpret)不同?
|
|