问题描述
我想知道是否有一种方法可以分配动态数组(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}};
传递给像voidprintmatrix(int **matrix,int n)
这样的函数?
无法完成,一个是指向int
的指针,另一个是int
s的数组, aka 的2D数组int
是不兼容的,您不能将其中任何一个传递给另一个的参数。
最多可以传递一个指针数组,可以将 ie int* matrix[SIZE]
传递给类型为int **matrix
的参数,这是因为该数组将衰减为一个指针作为参数传递时。
如前所述,这种分配在C ++中是不可能的。矩阵的每个元素只是一个指向int类型元素的指针。
此图显示了在动态分配矩阵时要执行的操作。必须在运行时为矩阵字段提供值时使用动态分配,例如,您使用std :: cin从用户那里获取数据,然后您可以动态地用该数据填充矩阵。