在上一个与按位运算相关的问题中,有人告诉我,如果数组未与地址对齐,则使用指针访问char
数组的代码int
(一次操作更大的字节块)可能会出现问题。char
int
然后,在 C 中思考,我想知道当malloc
为未知类型分配内存时会发生什么。例如,如果我这样做void *p = malloc(sizeof(int));
,我会得到一个有效的 char/int/long-aligned 内存地址吗?
根据引用标准的SO中的一些答案,“返回的指针应适当对齐,以便它可以转换为任何完整对象类型的指针”。
因此,我知道在这种情况下我可以毫无问题地从char*
到:int*
char *p = malloc(16);
int *n = (int*)p; // use n a base of an array of 16 / sizeof(int) ints
这是对的吗?
转向 C++,似乎相同的规则出现在标准. 那么,如果我这样做,我可以假设没有对齐风险吗?
char *p = new char[16];
int *n = reinterpret_cast<int*>(p);