指针数组和函数 CPP

Pointer Arrays and Functions CPP

我想知道是否有办法分配一个动态数组(C 风格),就像在非动态数组的情况下(而不是 matrix[0][0] = ...)的值,例如:

int n = 3;
int ** matrix = new int*[n];

for(int i = 0; i < n; ++i){
     matrix[i] = new int[n];
}

matrix =  {{1,1,1},{2,0,2},{3,3,3}};

我如何将非动态数组 int matrix[3][3] = {{1,1,1},{2,0,2},{3,3,3}}; 传递给像 void printmatrix(int **matrix, int n) 这样的函数?

谢谢!!

I wonder If there's a way to assign a dynamic array (in c), values like in the case of a non dynamic array (instead of matrix[0][0] = ...)

对于二维数组,仅在声明时,例如:

int matrix[][3] = {{1,1,1},{2,0,2},{3,3,3}};

int matrix[][3]{{1, 1, 1}, {2, 0, 2}, {3, 3, 3}};

允许对数组进行值初始化。 之后你不能,matrix 不是可修改的左值,你不能以这种方式直接赋值。

稍后添加值是 exactly the same in both situations,使用 matrix[0][0] = ...,这对二维数组和指向指针分配的指针都有效,它是我可能添加的指针解引用符号的一个很好的替代品。

And how would I pass the non dynamic array int matrix[3][3] = {{1,1,1},{2,0,2},{3,3,3}}; to a function like void printmatrix(int **matrix, int n)?

做不到,一个是指向int的指针,另一个是int的数组数组,又名 int 的二维数组,它们是不兼容的,你不能将其中任何一个传递给另一个的参数。

最多可以传递一个指针数组, int* matrix[SIZE]可以传递给int **matrix类型的参数,这是因为当作为参数传递时,数组将衰减为指针。

如前所述,这种赋值在 C++ 中是不可能的。矩阵的每个元素只是指向 int 类型元素的指针。

这张图片显示了当你动态分配时你想做什么 matrix.Dynamic 当你必须在运行时给矩阵字段赋值时使用分配,例如你从用户那里获取数据 std::cin 然后用该数据动态填充矩阵。