【发布时间】:2013-02-27 06:17:19
【问题描述】:
我正在尝试这个指针技巧,但我不知道如何修复它,我在 ubuntu 12.04 64 位上运行 g++ 4.6。查看下面的代码:
int arr[5];
arr[3] = 50;
((short*) arr)[6] = 2;
cout << arr[3] << endl;
逻辑是:由于short是2个字节,int是4个字节,我想改变arr[3]中的前2个字节,同时保持后2个字节的值为50。所以我'我只是弄乱了位模式。不幸的是,sizeof(int*) 和 sizeof(short*) 都是 8 个字节。是否有返回大小为 2 字节的指针的类型转换?
更新:
我意识到这个问题写得不好,所以我会解决这个问题:
我得到的cout << arr[3] << endl;的输出是2。我想得到的输出既不是2也不是50,而是一个很大的数字,说明int位模式的左边部分已经改变,而右边部分存储在 arr[3] 中的 int (第二个 2 位)仍然保持不变。
【问题讨论】:
-
您正在操作整数位,而不是指针。指针的大小无关紧要。您的问题出在其他地方。
-
记住
[]操作员是在做一个尊重。((short*) arr)[6]是一个short大小的值。 -
我同意你的观点,但这是我能想到的唯一解释为什么它不起作用:s
-
@naxchange:什么“不起作用”?您看到的行为是什么,而您期望的行为是什么?
-
如果您尝试以这种方式操作数据,您将遇到字节交换和字节序问题。
标签: c++ c pointers dereference