【发布时间】:2019-08-07 09:32:44
【问题描述】:
如何将指针转换为“指向数组的指针”?
例如,假设我有一个指针 int *data 指向某个 15 个整数的内存块。我想做类似的事情:
int (*mat)[5] = data;
所以我现在可以制作:
for(int i = 0; i < 3; i++){
for(int j = 0; j < 5; j++){
mat[i][j] = // Something.
}
}
但是,我收到 gcc 警告:
warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
int (*mat)[5] = data;
和 g++ 的错误:
error: cannot convert ‘int*’ to ‘int (*)[5]’ in initialization
int (*mat)[5] = data;
如果我添加一个显式转换 int (*mat)[5] = (int (*)[5])data; 它编译时没有警告,但我不知道这是否会产生未定义的行为。
实现此目的的正确方法是什么?可以在没有明确演员表的情况下制作吗?
编辑:
我知道我可以像这样使用int * 指针:
data[5*i + j] = \\ Something.
但在我的实际情况下,我需要通过 3 个维度迭代数组,
[] 中的代码很长,这就是我想使用
mat[i][j] 符号。
【问题讨论】:
-
也许将数组作为
void*传递?见ideone.com/zOeKcE -
你不能直接使用
int **而不是int *吗?这样您就可以使用[][]语义。一个简单的int *做不到。如果你真的想转换它,你需要创建一个int **并根据你需要的矩阵尺寸复制int *的内容。 -
没有像 C/C++ 这样的语言。你需要选择一个。无论如何要问一个问题。