gpt4 book ai didi

c - 将 int[][] 形式的变量传递给 int 类型的方法**

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:56 24 4
gpt4 key购买 nike

我有一个二维整数数组和一个从该二维数组中检索特定列的函数。该函数有一个 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);
}

最佳答案

没有简单的方法来做到这一点,因为它们是完全不同的类型——一个是二维数组,另一个是指向(大概是一维数组)指针的指针(大概是一维数组) ) 整数数组。

这是 int[2][2] 的内存布局,假设地址为 5678:(并假设 int 是一个字节,它们在大多数真实系统上并不存在,但让我们假装)

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

)

关于c - 将 int[][] 形式的变量传递给 int 类型的方法**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39968515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com