取消引用被视为地址的整数文字是可移植/有效的 C 语言吗?即,如果我想在内存地址 0x12345678
处设置一个 64 位值到 123
,是以下可移植且有效的 C,至少按照 C89 标准:
*(uint64_t *)(0x12345678) = 123ULL;
我没有看到任何编译器警告(通过 gcc -std=c89 -Wall input.c
测试),但我记得前一段时间看到一个关于这个主题的问题,其中有一个案例用于存储中间变量中的地址,而不是直接取消引用整数文字(已转换为指针地址)。
最佳答案
只要地址0x12345678
是有效的并且有一个uint64_t
对象,转换或直接使用整数都没有问题。但它可能不是所有平台上的有效地址。所以,如果您知道自己在处理什么,那很好。
固定宽度类型仅在 C99 中引入。因此,当您询问 C89 中转换为 uint64_t*
的可移植性时,我觉得这很矛盾 :)
关于c - 有效取消引用 C 中的整数作为指针文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41384460/