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

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

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

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

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

推荐答案

是的,根据第C99 standard (ISO/IEC 9899)节第6.2.5节第27条:

指向void的指针的表示和对齐要求应与 指向字符类型的指针.39)

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

C++相关问答推荐

sizeof结果是否依赖于字符串的声明?

在函数中使用复合文字来初始化C语言中的变量

有没有更简单的方法从用户那里获取数据类型来计算结果

*p[num]和(*p)num的区别

如果dim指定数组中的数据量,使用dim-1会不会潜在地导致丢失一个元素?

如何在ASM中访问C struct 成员

为什么将函数名括在括号中会禁用隐式声明?

I2C外设在单次交易后出现故障

正数之和是负数

C11/C17标准允许编译器清除复合文字内存吗?

有没有一种方法可以用C创建保留限定符的函数?

S,在 struct 中创建匿名静态缓冲区的最佳方式是什么?

程序对大输入给出错误答案

try 判断长整数是否为素数

为什么GCC不能在 struct 初始值设定项中以sizeof作为条件的三进制中处理复合文字的编译时求值?

为什么一个在线编译器拒绝这个VLA代码,而本地的Apple clang却不拒绝;t?

从管道读取数据时丢失

括号中的 C 函数声明显然永远调用自身,有什么意义?

如何在 C 中从整数打印 128-255 个字符?

使用行/列指针在已排序的二维数组中进行二分查找