将数组传递给函数

Ana*_*oli 0 c

int main(){

    int right[2][3] = {
    {1,4,6}, {2,7,5}
    }

    ....


    calc(right);
}

int calc(int ** right){
    printf("%i", right[0][0]);
}
Run Code Online (Sandbox Code Playgroud)

我计算基于矩阵计算一些数字的函数,但我不知道为什么当我在calc函数中访问变量时我得到seg错误.有没有人知道解决方案?

编辑:现在这就是它在calc函数中所做的一切.我有一些计算的东西,但它都注释掉了试图弄清楚如何访问这个变量.

Mar*_*n B 7

C中的二维数组不像您认为的那样工作.(别担心,你并不孤单 - 这是一种常见的误解.)

代码中隐含的假设rightint *指针数组,每个指针都指向一个数组int.它可以这样做 - 而且,令人困惑的是,访问这样一个数组的语法是相同的,这可能是导致这种误解的原因.

C 实际做的是制作right一个12 int秒的数组,在内存中连续排列.像这样的数组访问

a=right[i][j];
Run Code Online (Sandbox Code Playgroud)

实际上相当于:

int *right_one_dimensional=(int *)right;
a=right[i*3 + j];
Run Code Online (Sandbox Code Playgroud)

要将数组传递给calc函数,需要执行以下操作:

int calc(int *right, size_t d){
    // For example
    a=right[i*d + j];
}
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

int right[2][3] = {
    {1,4,6}, {2,7,5}
};

calc(&right[0][0], 3);
Run Code Online (Sandbox Code Playgroud)

编辑:有关这方面的更多背景,与Binary Worrier的评论相关的问题绝对值得一看.

  • 你也可以将calc指定为`int calc(int right [] [3])`并通过简单的`calc(右)来调用它;` (2认同)