按照一些教程,并遇到了这段代码:
·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] = {}
一样初始化。请帮我理解。感谢。
答案 0 :(得分:3)
在您显示的代码中没有指向对象的指针数组。
Particle* m_pParticles
是指向Particle
的指针。在C和C ++中(通常,在支持指针的语言中),普通指针不区分指向单个项目并指向项目数组的第一项,甚至指向某个项目中间的某个项目。项目数组。
因此,Particle* m_pParticles
(指向Particle
的指针)可以指向单个Particle
,也可以指向Particle
的数组。
语句m_pParticles = new Particle[NPARTICLES];
分配一个Particle
数组,其中包含NPARTICLES
个Particle
个实例,并设置m_pParticles
以指向数组的第一个元素。< / p>
答案 1 :(得分:2)
采取传统的&#34;数组如:
int arr[2] = {4, 3};
如果您创建指向此数组的指针:
int* foo = arr;
我们使foo
指向此数组的第一个元素。 foo
不知道它是否指向一个&#34;单个变量&#34;或者对阵列,它并不关心。由程序员来了解这些信息。
在你的情况下,构造函数指定m_pParticles
指向新分配的数组的第一个元素,所有指针都知道它指向某些 {{1对象。编程人员知道它指向一个数组,该数组使得通过索引符号访问指针有效,例如m_pParticles
。