将动态分配的数组作为参数传递给C语言

Thi*_* G. 4 c arrays matrix

所以...我在我的主要上有一个动态分配的数组:

int main()
{
    int *array;
    int len;

    array = (int *) malloc(len * sizeof(int));
    ...
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我还想构建一个函数,用这个动态分配的数组做一些事情.到目前为止我的功能是:

void myFunction(int array[], ...)
{
   array[position] = value;
}
Run Code Online (Sandbox Code Playgroud)

如果我将其声明为:

void myFunction(int *array, ...);
Run Code Online (Sandbox Code Playgroud)

我还能做到:

array[position] = value;
Run Code Online (Sandbox Code Playgroud)

或者我将不得不这样做:

*array[position] = value;
Run Code Online (Sandbox Code Playgroud)

...?

此外,如果我正在使用动态分配的矩阵,哪一个是声明函数原型的正确方法:

void myFunction(int matrix[][], ...);
Run Code Online (Sandbox Code Playgroud)

要么

void myFunction(int **matrix, ...);
Run Code Online (Sandbox Code Playgroud)

...?

Tom*_*Tom 6

如果我将其声明为:

void myFunction(int *array, ...);
Run Code Online (Sandbox Code Playgroud)

我还能做到:

array[position] = value;
Run Code Online (Sandbox Code Playgroud)

是的 - 这是合法的语法.

另外,如果我正在使用动态分配的矩阵,那么声明函数原型是正确的:

void myFunction(int matrix[][], ...);
Run Code Online (Sandbox Code Playgroud)

要么

void myFunction(int **matrix, ...);
Run Code Online (Sandbox Code Playgroud)

...?

如果您正在使用多个维度,则必须声明函数声明中除第一个维度之外的所有维度的大小,如下所示:

void myFunction(int matrix[][100], ...);
Run Code Online (Sandbox Code Playgroud)

此语法不会像您认为的那样执行:

void myFunction(int **matrix, ...);
matrix[i][j] = ...
Run Code Online (Sandbox Code Playgroud)

这声明了一个名为的参数matrix,它是指向int的指针; 尝试取消引用matrix[i][j]可能会导致分段错误.

这是在C中使用多维数组的许多困难之一.

以下是解决此主题的有用SO问题: 定义矩阵并将其传递给C中的函数