指向2D数组参数的指针(C)

时间:2014-11-15 02:02:13

标签: c arrays pointers arguments 2d

基本上我所拥有的是一个接受二维数组作为参数的函数,我希望能够创建一个指向该数组的二维指针。这是示例代码:

int main(){
    int a[3][3]={0,1,2,3,4,5,6,7,8};
    func(a);
}
int func(a[3][3]){
    int (*ptr)[3][3]=&a;//this is the problem
}

由于某些原因,如果在函数中声明了数组(而不是作为参数),这样可以正常工作,但我不能在我的生活中找出如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

在C中,您不是直接将数组传递给函数,而是通过引用传递 - 即通过将指针传递给数组的第一个元素 - 这很重要 - 数组大小。

编辑:当你声明X [5]时,你想要通过引用来调用的指针是X,即用乐趣调用函数(X,5); fun是用fun定义的(int * ptr,int length)

从移动应用程序发布,请根据需要编辑代码显示。

答案 1 :(得分:0)

无法通过C中的值传递数组。func does not mean what it looks like中的语法乍一看。

函数中的

a实际上是一个指针,而不是一个数组,所以你可以通过编写来实现你想要的:

int (*ptr)[3][3]= (int (*)[3][3])a;

工作计划,虽然将&a传递给func并让func直接接受int (*)[3][3]可能更简单:

#include <stdio.h>

int func(int a[3][3]){
    int (*ptr)[3][3]=(int (*)[3][3])a;

    for (int i = 0; i < 3; ++i)
        for (int j = 0; j < 3; ++j)
            printf("%d\n", (*ptr)[i][j]);
}

int main(){
    int a[3][3]={0,1,2,3,4,5,6,7,8};
    func(a);
}