【发布时间】:2020-09-15 16:02:13
【问题描述】:
当我在编译时不知道数组大小时,如何将 void 指针转换为二维数组(指向整数数组的指针数组)?有可能吗? (我这样做是因为,我将一个未知大小的二维数组传递给一个函数。所以我将二维数组转换为一个 void 指针,然后在该函数中我希望它重新转换。)
int i = 5;
int tab1[i][i];
//cast to void pointer
void *p = (void *)tab1;
//and recast back
int (*tab2)[5] = (int (*)[5])p; //this is working
int (*tab3)[i] = (int (*)[i])p; // but this is not
【问题讨论】:
-
当
i不是编译时间常数时,你不能int tab1[i][i]; -
请注意,
int tab1[i][i];不是标准 C++ 并且是编译器扩展。对于在运行时确定大小的数组,请使用std::vector -
你不能。无论您的原始问题是什么,您都需要提出不同的解决方案。
-
另外,二维数组(整数)不是指向整数数组的指针数组。它是一个整数数组的数组。那不是一回事。
标签: c++ arrays pointers casting