我有这个有趣的问题。我一直试图找到一种方法如何将我的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):/ 如果我不创建函数并且在用零填充数组后使用读取算法,一切正常,但我真的需要实现该函数。谁能告诉我我做错了什么? :)非常感谢你。
我仍然无法弄明白,每一个回复都非常有用:)
答案 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,它肯定会让你回到正轨。