我得到这个代码的错误:
无法用“int[3][3]”类型的左值初始化“int *”类型的变量
#include <iostream>
using namespace std;
int main(){
int mat_1[3][3]={1,2,3,4,5,6,7,8,9};
int mat_2[3][3]={10,11,12,13,14,15,16,17,18};
int dest_mat[3][3];
int *ptr_1 = mat_1;
int *ptr_2 =mat_2;
int *ptr_3=dest_mat;
我希望只为下面的每一个创建一个指针。我甚至尝试在矩阵名称之前放置&符号(&
),但仍然没有什么不同。
1条答案
按热度按时间gdrx4gfi1#
在大多数情况下,当你只通过数组的名称引用数组时,它会 * 衰减 * 为指向第一个元素的指针。
mat_1
是3个元素的数组,其中每个元素是3个int
s的数组。所以,当你这样做时:int *ptr_1 = mat_1;
mat_1
decays into a pointer to its 1st element,ie a pointer to anint[3]
array(akaint(*)[3]
).指向数组的指针与指向单个int
的指针是非常不同的类型,因此您看到的错误。与
ptr_2
和ptr_3
相同。根据您要完成的任务,您需要:
ptr_1
(以及ptr_2
和ptr_3
)第一个数组元素的第一个int
的地址,例如:int *ptr_1 = &mat_1[0][0];
其可以简化如下(让内部阵列衰减):
int *ptr_1 = mat_1[0];
ptr_1
(以及ptr_2
和ptr_3
)的类型更改为指向int
s数组的指针,而不是指向单个int
的指针,例如:int (*ptr_1)[3] = mat_1;