上下文:C++ 考虑下面的例子
class TestClass
{
private:
int A[];
int *B;
public:
TestClass();
};
TestClass::TestClass()
{
A = 0; // Fails due to error: incompatible types in assignment of `int' to `int[0u]'
B = 0; // Passes
}
A = 0 失败但 B = 0 成功。有什么收获? A到底是什么?常量指针?那我该如何初始化呢?
最佳答案
问题“int* 和 int[] 有什么区别?”是一个比大多数人会想到的更简单的问题:它取决于它的使用位置。
在声明中,如extern int a[];
表示某处有一个名为a
的数组,其大小在这里未知。在具有聚合初始化的定义中,如 int a[] = { 1, 2, 3 };
它表示一个大小的数组,作为程序员,我不想计算,而你,编译器, 必须从初始化开始解释。在没有初始化的定义中,这是一个错误,因为您不能定义一个未知大小的数组。在函数声明(和/或)定义中,它完全等同于 int*
,该语言指定在处理函数参数的类型时,将数组转换为指向所包含类型的指针。
在您的特定情况下,作为类成员的声明,int a[];
是错误的,因为您声明的是不完整类型的成员。如果你在那里添加一个大小,如 int a[10]
那么它就变成了类型为 int
和大小为 10 的数组的声明,这将为 10 保留空间int
在类的每个对象中。另一方面,int *b
只会为类中的整数指针保留空间。
关于c++ - C++ 中 int* 和 int[] 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4851234/