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
的变量,并且这两个变量都可以用作11
Employee
s的数组(实际上有两种不同的“数组”含义)。你的问题到底是什么?你以为会发生什么?。另一方面,当尝试动态分配它时,它给出的是。@000:这是调试器的一个事实,是由于数组的基本性质,而不是指向一个或多个对象的指针的基本性质。您必须记住,调试器是程序上的一个视图,它只根据作用域中变量的名称显示,不应该这么字面地理解!第一个
workers
只指向一个
Employee
,但它是11个序列中的第一个。@KerrekSB:看,这里有点混乱。因为根据类型系统,它(始终(有效))指向一名
员工
,但根据代码,它(当前)指向11名
员工
,这就是我在上面提到的。。。根据内存分配器,这也是正确的,这就是
delete[]workers
的工作原理。所以确实有一些方法来看待它。我认为以上内容现在已经足够清楚了。非常感谢你澄清这一点。指针对我来说还是新的。现在我知道了递增指针的方法,一切都解决了。@LightnessRacesinOrbit:我想很清楚:数组新表达式返回指向动态数组第一个元素的指针。数组在那里,但是没有一个表达式的值就是数组,你必须使用指针算法来获取所有数组元素。@KerrekSB:我想你没有领会我刚才说的要点,但没关系