void * 和 char * 之间的兼容性

mar*_*nev 3 c c99 void-pointers language-lawyer

void 和 char 指针是否保证具有相同的内存表示形式?

换句话说,执行以下命令后:

char a = 'z';
void *b = &a;
char *c;

memcpy(&c, &b, sizeof(b));
Run Code Online (Sandbox Code Playgroud)

我可以确定*c == 'z'(没有未定义的行为等)吗?

Mar*_*lli 10

是的,根据C99 标准 (ISO/IEC 9899) \xc2\xa76.2.5 第 27 节:

\n
\n

指向的指针void应与指向字符类型的指针具有相同的表示和对齐要求。39)

\n

39) 相同的表示和对齐要求意味着作为函数参数、函数返回值和联合成员的可互换性。

\n
\n