指针数组和函数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,2},{3,3,3}};

又如何将非动态数组int matrix[3][3] = {{1,3}};传递给类似void printmatrix(int **matrix,int n)函数

谢谢!

解决方法

我想知道是否有一种方法可以分配动态数组(在c中),像非动态数组(而不是matrix[0][0] = ...)那样分配值

对于2D数组,仅在声明时显示,例如

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

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

允许数组的值初始化。 之后,matrix不是可修改的左值,就不能以这种方式直接添加值。

以后使用matrix[0][0] = ...添加值是exactly the same in both situations,这对于2D数组和指向指针分配的指针均有效,可以很好地替代我可能添加的指针取消引用符号。

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

无法完成,一个是指向int的指针,另一个是int s的数组, aka 的2D数组int是不兼容的,您不能将其中任何一个传递给另一个的参数。

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

,

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

enter image description here

此图显示了在动态分配矩阵时要执行的操作。必须在运行时为矩阵字段提供值时使用动态分配,例如,您使用std :: cin从用户那里获取数据,然后您可以动态地用该数据填充矩阵。