创建指向对象的空数组

时间:2017-06-20 08:53:32

标签: c++ arrays

按照一些教程,并遇到了这段代码:

·H

class Swarm {
public:
    const static int NPARTICLES = 5000;
private:
    Particle * m_pParticles;
public:
    Swarm();
};

的.cpp

Swarm::Swarm() {
    m_pParticles = new Particle[NPARTICLES];
}

我无法理解,当我声明一个Particle Particle * m_pParticles;类型的变量时,它会变成构造函数中指向Particle的指针数组。因为iirc数组应该像MyObject *pObjects[N] = {}一样初始化。请帮我理解。感谢。

2 个答案:

答案 0 :(得分:3)

在您显示的代码中没有指向对象的指针数组。

Particle* m_pParticles是指向Particle的指针。在C和C ++中(通常,在支持指针的语言中),普通指针不区分指向单个项目并指向项目数组的第一项,甚至指向某个项目中间的某个项目。项目数组。

因此,Particle* m_pParticles(指向Particle的指针)可以指向单个Particle,也可以指向Particle的数组。

语句m_pParticles = new Particle[NPARTICLES];分配一个Particle数组,其中包含NPARTICLESParticle个实例,并设置m_pParticles以指向数组的第一个元素。< / p>

答案 1 :(得分:2)

采取传统的&#34;数组如:

int arr[2] = {4, 3};

如果您创建指向此数组的指针:

int* foo = arr;

我们使foo指向此数组的第一个元素。 foo不知道它是否指向一个&#34;单个变量&#34;或者对阵列,它并不关心。由程序员来了解这些信息。

在你的情况下,构造函数指定m_pParticles指向新分配的数组的第一个元素,所有指针都知道它指向某些 {{1对象。编程人员知道它指向一个数组,该数组使得通过索引符号访问指针有效,例如m_pParticles