c - 有效取消引用 C 中的整数作为指针文字

标签 c posix c89

取消引用被视为地址的整数文字是可移植/有效的 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/

相关文章:

c - 如何使用c语言以posix和openssl作为API与pop.gmail.com建立成功的pop3连接

c - 为什么在 c99 或 c90 模式中支持 _Generic 关键字?

c - 为什么 {typedef int* PTR;const PTR p=#} 不等于 "const int* p=&num"而等于 "int *const p=&num"?

c - 将数字的数字打印为字符的程序(C语言)

关于 pthread_attr_t 定义的困惑

c - 找出第二大数

c++ - Pthread 将函数传递给池

python - 在共享的多平台 POSIX 环境中使用 C

c - 结构指针强制转换

c - 由于 "implementation defined"优化而导致的行为改变是合法的还是预期的?