在功能C中无法访问2个DIM阵列

时间:2015-03-18 15:58:47

标签: c arrays

我有这个有趣的问题。我一直试图找到一种方法如何将我的2DIM数组传递给函数,我仍然很难失败。

所以我从另一个函数得到sizeX和sizeY,这是在用户加载数组后调用的。

...

   int sizeX = surf->settings->x;   // getting one dimension of the array
   int sizeY = surf->settings->y;   // getting second dimension of the array
   int** mirrorArray[sizeX][sizeY]; // create 2DIM array (I think this is perhaps wrong?
   for (int i = 0; i < sizeX; i = i+1 ) {   // filling it up with some zeros
        for (int j = 0; j < sizeY; j++ ) {
        mirrorArray[i][j] = 0;

    }}

    readArray((int **)mirrorArray, sizeX, sizeY); // now i would like to read the array (also maybe a source of my problems?)

这是我的阅读功能

void readArray(int *p[], int m, int n) {

        for (int i = 0; i < m; i = i+1) {
        for (int j = 0; j < n; j++) {
        printf("p[%i][%i] = %i \n", i, j, p[i][j]);
            }
        }

}

我真的很沮丧。即使我尝试访问数组中的第一个元素,我也会得到Segmentation faul(core dumped):/ 如果我不创建函数并且在用零填充数组后使用读取算法,一切正常,但我真的需要实现该函数。谁能告诉我我做错了什么? :)非常感谢你。

我仍然无法弄明白,每一个回复都非常有用:)

3 个答案:

答案 0 :(得分:1)

您需要在数组参数上指定行数和列数。以下内容在C99中有效:

void readArray(int m, int n, int p[m][n]);

请注意,我需要在此声明中将数组大小放在数组之前。现在该函数可以被称为:

int sizeX = surf->settings->x;   // getting one dimension of the array
int sizeY = surf->settings->y;   // getting second dimension of the array
int mirrorArray[sizeX][sizeY]; // create 2DIM array
readArray(sizeX, sizeY, mirrorArray);

答案 1 :(得分:0)

int** mirrorArray[sizeX][sizeY]; 

mirrorArray是指向指针的2D数组。你需要的是 -

int mirrorArray[sizeX][sizeY];

答案 2 :(得分:0)

声明不正确。它应该是:

int mirrorArray[sizeX][sizeY]

你的功能原型令人困惑。最好使用:

void readArray(int p[][], int m, int n) {

或:

   void readArray(int** p, int m, int n) {

你似乎对指针数组的等价感到不舒服。你应该阅读https://en.wikibooks.org/wiki/C_Programming/Pointers_and_arrays,它肯定会让你回到正轨。