我有一个二维整数数组和一个从该二维数组中检索特定列的函数。该函数有一个int **作为参数。如何创建一个int **来指向我的int [] []。
int* getColumn(int **matrix, int rows, int column, int columnNum)
{
...
}
int main()
{
int mat[2][2];
mat[0][0] = 1;
mat[0][1] = 2;
mat[1][0] = 3;
mat[1][1] = 4;
getColumn( ? , 2, 2, 1);
}
答案 0 :(得分:3)
没有 easy 方法可以做到这一点,因为它们是完全不同的类型 - 一个是2D数组,另一个是指向(可能是一维数组)指针的指针到(可能是1D阵列)整数。
这是int[2][2]
的存储器布局,例如地址5678 :(并假设整数是一个字节,它们并不是在大多数真实系统上,而是让'假装)
Address 5678 5679 5680 5681
+----+----+----+----+
| 1 | 2 | 3 | 4 |
+----+----+----+----+
^ address of mat
这是表示相同数组的一个int**
的内存布局:
Address 2345 2346 ... 3456 3457 ... 5682
+----+----+...+----+----+...+----+----+
| 1 | 2 |...| 3 | 4 |...|2345|3456|
+----+----+...+----+----+...+----+----+
^ address of mat2
如你所见,它们并不相同。主要的区别在于,int**
表示允许每一行都在一个完全不同的地址,并且"矩阵"实际上是一个包含指向每一行的指针的数组
但是,可以自己创建指向每一行的指针数组:
int *rows[2] = {
mat[0],
mat[1]
};
getColumn(rows, 2, 2, 1);
但如果你的矩阵总是不一样,这会很复杂。
(这个的内存布局是:
Address 5678 5679 5680 5681 ... 5700 5701
+----+----+----+----+...+----+----+
| 1 | 2 | 3 | 4 |...|5678|5680|
+----+----+----+----+...+----+----+
^ address of mat ^ address of rows
)