允许施放(双*)到(双**)?

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]

我知道它不是通过不兼容的指针类型完全混淆,但是我不确定.背景是我想要一个在二维数组(=图像)上运行的函数,但我希望能够只传递图像的一行或一列.

Jam*_*nze 5

double**与...不相容double*.转换是合法的,但您可以对结果做的唯一事情就是将其转换回来.这似乎或多或少显而易见:在32位机器上,a double*甚至不会具有相同的大小double.

但是你的例子没有将a转换double*double**.它创造了一个新的double**,指向的double*.这可以.