C++将数组相互分配;type int*=type int有效,但int=int*无效



我有一个问题:

为什么这会引发错误(无法从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表达式以及绑定到数组引用。

但从本质上讲,这意味着原始数组是不可赋值的,当然也不能为数组变量分配指针,因为结果应该是什么

但是,如果将数组放在struct中,则可以指定struct。这就是std::array。但是当您想要一个可分配的动态大小数组时,请使用std::vector

顺便说一下,函数也存在类似类型的衰变。

这个:

int static_Array[5]; 
int *dynamic_Array = new int[5]; // 1.
dynamic_Array = static_Array;    // 2.
  1. 动态分配数组并将第一个元素的地址存储在指针dynamic_Array
  2. static_Array的第一个元素的地址覆盖此地址

但是这个:

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

尝试使用地址初始化数组(因此编译器会给出关于无效指针到数组转换的错误(。

为什么第一个有效
因为静态数组(右侧(立即衰减为指针。这不能以另一种方式工作,不能保证此指针指向数组。

int static_Array[5]; 

这里static_Array是指向static_Array[0]的const指针,您不能像那样修改它

 static_Array = dynamic_Array;

最新更新