所以...我在我的主要上有一个动态分配的数组:
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)
...?
如果我将其声明为:
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)void myFunction(int matrix[][], ...);要么
Run Code Online (Sandbox Code Playgroud)void myFunction(int **matrix, ...);...?
如果您正在使用多个维度,则必须声明函数声明中除第一个维度之外的所有维度的大小,如下所示:
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中的函数