gpt4 book ai didi

c++ - C++ 中 int* 和 int[] 的区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:34 31 4
gpt4 key购买 nike

上下文: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/

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