给出以下代码:
void myfunc(int** a){
int temp=a[0][0];
}
int test[3][3] = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
myfunc(test);
我正在尝试将二维数组测试作为int**
传递给myfunc,但我的程序崩溃了。 (我已经阅读了一些代码示例,使用像a[][]
这样的参数作为参数,但是如果我想使用int**
,那么如何在我的函数中访问2D数组呢?
答案 0 :(得分:1)
C实际上没有多维数组,但有几种方法可以模拟它们。将这些数组传递给函数的方法取决于模拟多维的方式:
1.使用(动态分配的)指针数组(动态分配)数组。这主要用于直到运行时才知道数组边界。
void func(int** array, int rows, int cols)
{
int i, j;
for (i=0; i<rows; i++)
{
for (j=0; j<cols; j++)
{
array[i][j] = i*j;
}
}
}
int main()
{
int rows, cols, i;
int **x;
/* obtain values for rows & cols */
/* allocate the array */
x = malloc(rows * sizeof *x);
for (i=0; i<rows; i++)
{
x[i] = malloc(cols * sizeof *x[i]);
}
/* use the array */
func(x, rows, cols);
/* deallocate the array */
for (i=0; i<rows; i++)
{
free(x[i]);
}
free(x);
}
2.当两个维度全局可用时(作为宏或作为全局常量)。
#include <stdio.h>
const int M = 3;
const int N = 3;
void print(int arr[M][N])
{
int i, j;
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
printf("%d ", arr[i][j]);
}
int main()
{
int arr[][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
print(arr);
return 0;
}