【问题标题】:Pass 2d array by reference -in C [duplicate]通过引用传递二维数组-C [重复]
【发布时间】:2018-04-24 06:42:54
【问题描述】:

我正在编写一个函数,它以二维数组的形式接收 3 个方阵。它也应该收到大小。当我编译时,我收到这样的错误! 请注意,我浏览了互联网但找不到解决方案

    #include <stdio.h>
    void matadd(int **a,int** b,int** c,int n){
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
            c[i][j] = a[i][j] + b[i][j];
        }
    }
    }
int main(){
    int x[4][4]= {
        {0,1,2,3},
        {4,5,6,7},
        {8,9,10,11},
        {12,13,14,15}
    };
    int y[4][4]= {
        {0,1,2,3},
        {4,5,6,7},
        {8,9,10,11},
        {12,13,14,15}
    };
    int z[4][4] = {0};

    matadd(&&x,&&y,&&z,4);
    for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
        {
            printf("%d ", z[i][j]);
        }printf("\n");
    }
    return 0;
}

错误就在这里:

matadd.c: In function ‘main’:
matadd.c:26:9: warning: passing argument 1 of ‘matadd’ from incompatible pointer type [-Wincompatible-pointer-types]
  matadd(x,&&y,&&z,4);
         ^
matadd.c:2:6: note: expected ‘int **’ but argument is of type ‘int (*)[4]’
 void matadd(int **a,int** b,int** c,int n){
      ^~~~~~
matadd.c:26:2: error: label ‘z’ used but not defined
  matadd(x,&&y,&&z,4);
  ^~~~~~
matadd.c:26:2: error: label ‘y’ used but not defined

注意不能硬编码数组的大小。不同的时代,可能会用到不同的维度!

【问题讨论】:

  • 了解其他地方提供了更好的一般性答案。但是,为了提供帮助,我使用可变大小数组编写了此代码示例的固定版本。现在有什么方法可以提供该代码吗?
  • 是的,你能把它发到我的电子邮箱吗? abubakr0609@gmail.com

标签: c arrays pass-by-reference


【解决方案1】:
#include <stdio.h>
    void matadd(int a[4][4],int b[4][4],int c[4][4],int n){
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
            c[i][j] = a[i][j] + b[i][j];
        }
    }
    }
int main(){
    int x[4][4]= {
        {0,1,2,3},
        {4,5,6,7},
        {8,9,10,11},
        {12,13,14,15}
    };
    int y[4][4]= {
        {0,1,2,3},
        {4,5,6,7},
        {8,9,10,11},
        {12,13,14,15}
    };
    int z[4][4] = {0};

    matadd(x,y,z,4);

    for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
        {
            printf("%d ", z[i][j]);
        }printf("\n");
    }

    return 0;
}

【讨论】:

  • 正确的声明是void matadd(size_t n, int a[n][n], int b[n][n], int c[n][n]。
猜你喜欢
  • 2020-06-29
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 2012-10-07
相关资源
最近更新 更多