mb8*_*b84 1 c++ pointers casting strict-aliasing undefined-behavior
因为我在讨论中被告知"通过不兼容的指针类型进行别名是未定义的行为"(例如,double d; int *p = (int *)&d;以下问题:
它是否允许转换(double *)为(double **),例如double *d1; double **d2 = &d2 和使用类似于d2[0][y]期望的语法d1[y]?
我知道它不是通过不兼容的指针类型完全混淆,但是我不确定.背景是我想要一个在二维数组(=图像)上运行的函数,但我希望能够只传递图像的一行或一列.
double**与...不相容double*.转换是合法的,但您可以对结果做的唯一事情就是将其转换回来.这似乎或多或少显而易见:在32位机器上,a double*甚至不会具有相同的大小double.
但是你的例子没有将a转换double*为double**.它创造了一个新的double**,指向的double*.这可以.