gpt4 book ai didi

c++ - c++ 中 new something() 和 new something[] 的混淆

转载 作者:行者123 更新时间:2023-11-28 00:16:35 25 4
gpt4 key购买 nike

考虑 A 类:

class A
{
public:
int x;
int y;
}

现在如果我们写 A *a = new A() 那么 a 是一个指向类 A 的元素的指针。但是,如果我们写 A *a = new A[5] 然后 a[0] 不是指针而是类的实例。

我期望 a[n] 表现得像一个指针,因此像 a[0]->x 这样的操作保持有效。

我的理解有什么缺陷?

最佳答案

a 是指针时,根据定义,语法 a[N] 等同于 (*(a + N))。所以取消引用已经包含在表达式中。 new A()new A[N] 之间的区别在于分配的内容(单个元素与多个元素)。但是,在这两种情况下,都会返回指向单个元素的指针(new A() 情况下的唯一元素,new A[N] 情况下的第一个元素) )。在这两种情况下,可以在该指针上使用的语法是相同的。请注意以下几点:

A* a = new A();
a[0].x = 10;

这是访问由表达式 new A() 分配的单个对象的合法(尽管不常见)方式。同样:

A* a = new A[N];
a->x = 10;

这是访问由表达式 new A[N] 分配的数组第一个元素的合法方法。

关于c++ - c++ 中 new something() 和 new something[] 的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29908766/

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