void* 和 char* 之间的兼容性

3

空指针和字符指针是否保证具有相同的内存表示形式?

换句话说,在执行以下操作之后:

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

memcpy(&c, &b, sizeof(b));

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


你还没有为 *c 分配任何内存。 - Daniel A. White
1
@DanielA.White 我不需要这样做,它指向a。如果我这样做,那将会导致内存泄漏。 - martinkunev
1
@DanielA.White memcpy 设置了 c。未定义的指针值从未被使用。请注意 & 运算符。如果没有 &,则您的评论将是有效的。 - Tom Karzes
1
这里没有未定义的值,memcpy() 基本上是将 c = b。 - Paul Lynch
1个回答

10

是的,根据C99标准(ISO/IEC 9899)第§6.2.5点27的规定:

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

39) 相同的表示和对齐要求意味着可以作为函数参数进行交换、作为函数返回值进行交换以及作为联合体成员进行交换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接