如何修复在C++中使用2D数组时出现的'cannot initialize a variable of type int*'错误?

bvjxkvbb  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(288)

我得到这个代码的错误:
无法用“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;

我希望只为下面的每一个创建一个指针。我甚至尝试在矩阵名称之前放置&符号(&),但仍然没有什么不同。

gdrx4gfi

gdrx4gfi1#

在大多数情况下,当你只通过数组的名称引用数组时,它会 * 衰减 * 为指向第一个元素的指针。
mat_1是3个元素的数组,其中每个元素是3个int s的数组。所以,当你这样做时:
int *ptr_1 = mat_1;
mat_1decays into a pointer to its 1st element,ie a pointer to an int[3] array(aka int(*)[3]).指向数组的指针与指向单个int的指针是非常不同的类型,因此您看到的错误。
ptr_2ptr_3相同。
根据您要完成的任务,您需要:

  • 分配ptr_1(以及ptr_2ptr_3)第一个数组元素的第一个int的地址,例如:

int *ptr_1 = &mat_1[0][0];
其可以简化如下(让内部阵列衰减):
int *ptr_1 = mat_1[0];

  • ptr_1(以及ptr_2ptr_3)的类型更改为指向int s数组的指针,而不是指向单个int的指针,例如:

int (*ptr_1)[3] = mat_1;

相关问题