我对从指针到整数和各种相关操作的转换的定义性(未定义性、实现定义性)感兴趣。我主要对 C11 感兴趣,但欢迎其他标准版本(甚至 C++)的答案。
出于这个问题的目的,假设 C 实现提供了intptr_t
.
考虑以下函数:
#include <assert.h>
#include <stdint.h>
int x;
int y;
int z[2];
void f1(void) {
int *p = &x;
intptr_t i = p;
}
void f2(void) {
int *p = &x;
intptr_t i1 = p;
intptr_t i2 = p;
assert(i1 == i2);
}
void f3(void) {
int *p1 = &x;
int *p2 = &y;
intptr_t i1 = p1;
intptr_t i2 = p2;
assert(i1 != i2);
}
void f4(void) {
int *p1 = …
Run Code Online (Sandbox Code Playgroud)