-1

我只想使用函数在 C 中打印出一个静态数组(二维数组)。我使用 gcc 作为我的编译器。当我尝试运行我的代码时,它给了我一个段错误,我不知道为什么:

#include <stdio.h>

void print_out_an_array(int n, int m, int tab[n][m])
{
    int i,j;
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
            printf("tab[%d][%d] = %d\n", i, j, tab[i][j]);
}

int main(int argc, char **argv)
{
    int tab[2][4] = {{1,2,3,4}, {5,6,7,8}};
    print_out_an_array(tab, 2, 4);

    return 0;
}
4

3 回答 3

3

您的函数调用和函数定义不匹配

您的函数调用
print_out_an_array(tab, 2, 4); ,但在函数定义中,您的第一个参数是int
void print_out_an_array(int n, int m, int tab[n][m])

使参数相同,例如:

将函数调用更改为
``print_out_an_array(2, 4, tab);`

更新
检查此代码是否有效

并阅读此作为参考C,传递二维数组

于 2013-11-14T19:28:08.497 回答
3

在您的函数定义中,第一个参数是int类型,但您使用第一个参数调用函数作为int **. 将您的函数调用更改为

print_out_an_array(2, 4, tab);  

关于您评论中的问题:

好的,但是这段代码怎么样:http: //ideone.com/Z4mHkb为什么它给我一个错误?

函数参数**tabtab[n][m]不等价。编译器将tab [m][n]其视为函数参数,将其解释为

void fun(int (*)[m]tab, int n, int m)

即,它解释为指向整数tab数组的指针。m在看到 int **tab时,它只是简单地解释tab指向整数的指针(或指向 的指针数组(int *tab[]int)。

于 2013-11-14T19:29:38.143 回答
2

我没有回答解决方案显而易见的原始解决方案,而是从您的评论中回答另一个问题。

你的数组是一个

int[][N]

当你通过一个

int ** to your function.

这些是完全不同的:

  • Anint[][N]具有来自所有维度的所有值。
  • 然而, Anint **指向一个或多个指针,依次指向实际值。

int[][],您可以省略一个间接级别并将其转换为

int (*)[N]

即指向数组的指针。该数组必须具有确定的大小,在您的情况下也不满足。

于 2013-11-14T19:43:13.050 回答