【问题标题】:Pointer to 2D Array Argument (C)指向二维数组参数的指针 (C)
【发布时间】:2015-01-12 12:52:04
【问题描述】:

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

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
}

由于某种原因,如果在函数中声明了数组(而不是作为参数),这可以正常工作,但我一生都无法弄清楚如何解决这个问题。

【问题讨论】:

标签: c arrays pointers arguments 2d


【解决方案1】:

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

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

从移动应用发布,请酌情编辑代码显示。

【讨论】:

    【解决方案2】:

    数组不能在C中按值传递。乍一看funcdoes 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-11
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多