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

标签 c++ arrays pointers int assign

我有一个问题:

为什么会抛出错误(无法从 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/

相关文章:

C++ 枚举模板偏特化

javascript - 我想循环遍历数组并动态输出结果..如果没有匹配项我想输出另一个结果

c - 如何通过丢弃重复元素在数组中查找一系列唯一数字

c - 将 char 数组传递给另一个函数

c++ - 是什么让 char * 成为一个字符数组?

c++ - 有什么方法可以通过在 C++ 中读取文件来构造函数指针

c++ - 有没有办法使成员函数不能从构造函数调用?

如果访问错误的字符串索引,c++ 不会抛出错误

java - 错误 : can only iterate over an array or an instance of java. lang.Iterable

c++ - 定义基于模板的映射指针,以便在验证范围时将 int 解析为 enum