用两个指针初始化数组

khe*_*nik 3 c arrays

int main() {
    int **matrix = {
        {1, 3, 2, 4},
        {3, 2, 4, 5},
        {9, 3, 2, 1}
    };

    getchar();
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么这会显示诸如"标量初始化器周围的括号"之类的警告?
  2. 为什么我需要使用多个指针初始化多维数组?(如果你能给我一些非常容易理解的解释......)
  3. 如果我想使用int matrix [3] [4]而不是int**矩阵......如果我想传递这个数组,那将是一个函数参数?int[][]

oua*_*uah 5

int **是指针类型而不是数组类型.指针不是数组.使用类型int [3][4].

您不能将数组传递给函数,但可以将指针传递给数组.将指针传递给数组4的函数声明int将是:

void f(int arr[3][4]);
Run Code Online (Sandbox Code Playgroud)

要么

void f(int arr[][4]);
Run Code Online (Sandbox Code Playgroud)

要么

void f(int (*arr)[4]);
Run Code Online (Sandbox Code Playgroud)

这三个声明是等价的.