使用具有相邻内存的指针定义2D数组

时间:2013-07-12 09:03:15

标签: c arrays pointers

我想过做

int arr[row][col];

但是我想因为我要将整个arr多次传递给一个函数,所以它可能会给我stackoverflow [因为ROW和COL可以是几千]。因此,如果我使用指针代替它,那么传递指针将是一种更好的方法,因为我还打算在通过各种函数时更改数组的值。

如何使用指针定义数组,如何将其传递给函数?每当我想访问一个元素时,打算做arr [i] [j]。

2 个答案:

答案 0 :(得分:3)

当您将数组作为参数传递时,只传递指向其第一个元素的指针,而不是整个数组。

所以函数签名看起来像这样:

void some_function(int arr[][col]);

或者可选

void some_function(int (*arr)[col]);

如果列大小不是全局编译时常量,那么您也可以将它作为参数传递给函数:

void some_function(const size_t col, int arr[][col]);

或者

void some_function(const size_t col, int (*arr)[col]);

答案 1 :(得分:0)

将数组传递给函数是可以的。

时,数组在作为参数传递时被视为指针,也就是说,只复制第一个元素的地址。

但一定要将行数和列数作为参数传递。