gpt4 book ai didi

C++ 将数组分配给彼此; type int* = type int 有效但 int = int*?

转载 作者:行者123 更新时间:2023-11-28 00:31:56 26 4
gpt4 key购买 nike

我有一个问题:

为什么会抛出错误(无法从 int* 转换为 int[5])

int static_Array[5]; 
int *dynamic_Array;

dynamic_Array = new int[5];
static_Array = dynamic_Array;

虽然这工作正常?

int static_Array[5]; 
int *dynamic_Array;

dynamic_Array = new int[5];
dynamic_Array = static_Array; //This line changed

我猜测类型 int 可以被编译器转换为 int* 吗?但是为什么编译器也不能将 int 转换为 int*?

谁能提供一个实际的解释?

谢谢!

最佳答案

当在需要指针的上下文中指定原始数组时,它会转换为指向第一项的指针(在生成该指针值的意义上),这称为类型衰减

不会发生这种情况的上下文包括 sizeof 表达式、typeid 表达式和对数组引用的绑定(bind)。

但本质上这意味着原始数组不可赋值,当然你不能将指针赋给数组变量,因为结果应该是什么。

但是,如果将数组放入struct,则可以分配struct。这就是 std::array 的含义。但是当你想要一个可分配的动态大小数组时,使用 std::vector

顺便说一句,函数也有类似的类型衰减。

关于C++ 将数组分配给彼此; type int* = type int 有效但 int = int*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com