【发布时间】:2017-11-02 15:16:29
【问题描述】:
我应该创建一个变量
long long hex = 0x1a1b2a2b3a3b4a4bULL;
然后定义4个指向1a1b、2a2b、3a3b和4a4b的指针。然后我打印这些双字节的地址和值。
我的方法是创建一个指针
long long *ptr1 = &hex;
然后使用指针算术得到下一个值。我意识到增加这个指针会增加 long long 字节,而不是像我需要的那样增加 2 个字节。创建短指针
short *ptr1 = &hex;
这是我需要的,但我的编译器不会让我这样做,因为数据类型不兼容。我该如何解决?有没有办法创建一个递增 2 个字节的指针并将其分配给更大数据类型的变量?
【问题讨论】:
-
请显示minimal reproducible example。或者换句话说:展示你的代码而不是描述它。
-
“工作”代码将违反严格的别名规则,因此在技术上是 UB。大多数编译器都会按照您的预期进行,但标准不保证任何事情(好的)都会发生。
-
@MichaelWalz 下次我会记住这一点,我还编辑了我的帖子!
-
嗨,丹尼斯,我从问题中删除了解决方案,并将其放在了我的回答中(不是私人的,因为你接受了我的回答,我认为最好把它放在那里)。一个问题必须是一个问题,它没有答案的地方。如果您不这么认为,请告诉我。谢谢。
标签: c pointers pointer-arithmetic strict-aliasing