上下文: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
}
Run Code Online (Sandbox Code Playgroud)
A = 0失败但B = 0成功.有什么收获?A究竟是什么?常量指针?我如何初始化呢?
Dav*_*eas 11
问题是"int*和int []之间有什么区别?" 这是一个不像大多数人想象的那么简单的问题:它取决于它的使用地点.
在一个声明中,就像extern int a[];它意味着某个地方有一个名为的数组a,其大小在这里是未知的.在使用聚合初始化的定义中,就像int a[] = { 1, 2, 3 };它意味着一个大小为I的数组,作为程序员,不想计算,并且编译器必须从初始化中解释.在没有初始化的定义中,这是一个错误,因为您无法定义未知大小的数组.在函数声明(和/或)定义中,它完全等效于int*,语言指定在处理函数的参数类型时,数组被转换为指向包含类型的指针.
在您的特定情况下,作为类成员的声明,int a[];是一个错误,因为您声明一个不完整类型的成员.如果你在那里添加一个大小,int a[10]那么它就变成了类型int和大小为10 的数组的声明,并且将int在类的每个对象中保留10个空格.而另一方面,int *b只会为类中的整数指针保留空间.