为什么错误是表达式不是可修改的左值

img

因为b的类型是int(*)[2]b[i]的类型是int [2],是一个数组类型,C/C++不允许对一个数组类型直接赋值。
b[i] = a[i]改为b=a,这里是指针赋值

FROM https://en.cppreference.com/w/cpp/language/array#Assignment

Objects of array type cannot be modified as a whole: even though they are lvalues (e.g. an address of array can be taken), they cannot appear on the left hand side of an assignment operator:

我是这样理解的:这里的b是指向二个int型整数的数组的指针,然后b[i]是第i个数组的地址,所以不能对其赋值,可以把b赋值为a,a可以理解为第一个二个int型整数数组的地址,然后可以用他来遍历这个二维数组。

说的简单点,报错那个地方他是一个值,值是不能直接赋值的,如果需要修改这个值如下写法即可!


*(DWORD*)&b[i] = a[i];

b是指针,等号左边代表一整行的地址,用一个数据带入一整行,会出问题

我的理解是:b是一个指向2个int元素数组的指针。所以在你将b指向a(b=a)之前,b并没有被分配任何地址,是不能有b[i]这样的用法的。