C++ 动态分配结构数组
我使用的结构是:C++ 动态分配结构数组,c++,C++,我使用的结构是: struct Employee { char firstName[10]; char lastName[10]; char SSN[11]; double wage; int hours; char workerStatus; }; 当尝试创建数组时,我可以 Employee workers[11]; 它将创建一个由11名员工组成的数组 然而,当我尝试 Employee* workers = new Employee[11];
struct Employee {
char firstName[10];
char lastName[10];
char SSN[11];
double wage;
int hours;
char workerStatus;
};
当尝试创建数组时,我可以
Employee workers[11];
它将创建一个由11名员工组成的数组
然而,当我尝试
Employee* workers = new Employee[11];
它只会给我一个叫做workers的变量。
为什么会这样
为什么会这样
因为这正是你让你的电脑实现的
事实上,在这两种情况下,都有一个变量名为workers
Employee* workers = new Employee[11];
在这里,您要求它创建一个变量workers
,一个类型为Employee*
的指针,并使其指向由11个Employee
对象组成的动态分配块
Employee workers[11];
在这里,您要求它创建一个变量workers
,一个类型为Employee[11]
的数组
在这两种情况下,基础数据都由11个Employee
s组成,但在指针的情况下,Employee
s的数量不会烘焙到类型中。这就是调试器无法同时自动显示所有员工的原因:它不知道有多少员工!它只能向您显示员工当前指向的员工。但是您可以安全地将工人
增加十次,以查看其他员工
s
我不知道你为什么期望两行完全不同的代码来做同样的事情。在这两种情况下,你只会得到一个名为workers
的变量,并且这两个变量都可以用作11Employee
s的数组(实际上有两种不同的“数组”含义)。你的问题到底是什么?你以为会发生什么?。另一方面,当尝试动态分配它时,它给出的是。@000:这是调试器的一个事实,是由于数组的基本性质,而不是指向一个或多个对象的指针的基本性质。您必须记住,调试器是程序上的一个视图,它只根据作用域中变量的名称显示,不应该这么字面地理解!第一个workers
只指向一个Employee
,但它是11个序列中的第一个。@KerrekSB:看,这里有点混乱。因为根据类型系统,它(始终(有效))指向一名员工
,但根据代码,它(当前)指向11名员工
,这就是我在上面提到的。。。根据内存分配器,这也是正确的,这就是delete[]workers
的工作原理。所以确实有一些方法来看待它。我认为以上内容现在已经足够清楚了。非常感谢你澄清这一点。指针对我来说还是新的。现在我知道了递增指针的方法,一切都解决了。@LightnessRacesinOrbit:我想很清楚:数组新表达式返回指向动态数组第一个元素的指针。数组在那里,但是没有一个表达式的值就是数组,你必须使用指针算法来获取所有数组元素。@KerrekSB:我想你没有领会我刚才说的要点,但没关系