可能重复:
C:创建指向二维数组的指针
定义数组时,如
int k[100];
它可以转换为 int*:
int* pk = k;
它有一个指针变量可以转换为多维数组吗?
int m[10][10];
??? pm = m;
可能重复:
C:创建指向二维数组的指针
定义数组时,如
int k[100];
它可以转换为 int*:
int* pk = k;
它有一个指针变量可以转换为多维数组吗?
int m[10][10];
??? pm = m;
int m[10][20];
int (*pm)[20] = m; // [10] disappears, but [20] remains
int t[10][20][30];
int (*pt)[20][30] = m; // [10] disappears, but [20][30] remain
不过,这不是“演员”。Cast 是一种显式类型转换。在上述示例中,转换是隐式的。
并不是说指针类型仍然依赖于除第一个之外的所有数组维度。不可能有一个完全“无量纲”的指针类型可以在这种情况下工作,即int **
指针不能与内置的二维数组一起工作。int ***
带有内置 3D 数组的指针也不会。
是的,当然,您可以拥有指向多维数组的指针。
int m[10][10];
int (*pm)[10] = m;
这个怎么样:
int k[100];
int* pk = k;
int m[10][10];
int **ptr = (int **) malloc(10 * sizeof(int*));
for(int i=0;i<10;i++)
{
ptr[i] = m[i];
}