C 中的数组赋值困境
在 C 中,将一个数组直接赋值给另一个数组是不可行的,并且出现错误消息“Error C2106” : 遇到“=”:左操作数必须是左值。这个问题源于 C 中数组由于与 C 的兼容性而产生的特殊行为。
理解行为
C 中的数组由于继承自而不可分配C的数组实现。数组表示为其第一个元素的衰减引用,使它们成为不可修改的左值。换句话说,数组不能像常规变量一样分配给其他对象。
解决方案
要在 C 中使用类似数组的功能,标准模板中的替代容器推荐使用库(STL),例如 std::array 或 std::vector。这些 STL 容器允许类似数组的行为,同时提供赋值功能。
std::array 示例
#include <array> int main() { std::array<int, 5> numbers = {1, 2, 3}; std::array<int, 5> values = {}; values = numbers; }
数组的回退
如果无法使用 STL 容器,请使用循环或函数手动复制数组元素像 std::copy 是必要的。
数组复制示例
#include <algorithm> int main() { int numbers[5] = {1, 2, 3}; int values[5] = {}; std::copy(numbers, numbers + 5, values); }
附加说明
值数组可以使用空的初始值设定项列表进行初始化,如下所示,依赖于聚合的标准定义值初始化规则,它将未指定的元素初始化为零。
int values[5] = {};
以上是为什么我不能在 C 中直接对数组进行赋值,有哪些替代方法?的详细内容。更多信息请关注PHP中文网其他相关文章!