空指针和字符指针是否保证具有相同的内存表示形式?
换句话说,在执行以下操作之后:
char a = 'z';
void *b = &a;
char *c;
memcpy(&c, &b, sizeof(b));
我能确定 *c == 'z'
吗?(没有未定义行为等)?
空指针和字符指针是否保证具有相同的内存表示形式?
换句话说,在执行以下操作之后:
char a = 'z';
void *b = &a;
char *c;
memcpy(&c, &b, sizeof(b));
我能确定 *c == 'z'
吗?(没有未定义行为等)?
是的,根据C99标准(ISO/IEC 9899)第§6.2.5点27的规定:
void
指针应具有与字符类型指针相同的表示和对齐要求。39)39) 相同的表示和对齐要求意味着可以作为函数参数进行交换、作为函数返回值进行交换以及作为联合体成员进行交换。
*c
分配任何内存。 - Daniel A. Whitememcpy
设置了c
。未定义的指针值从未被使用。请注意&
运算符。如果没有&
,则您的评论将是有效的。 - Tom Karzes