假设我有这段代码
typedef struct CAR
{
char name[20];
int price;
};
int main()
{
int n;
cin>>n;
CAR *p;
p = new CAR[n];
for (int i = 0; i < n; i++)
cin >> p[i].price;
for (int i = 0; i < n; i++)
cout<< p[i].price;
delete []p;
}
指针是否指向内存中的名称位置?
我的英语非常糟糕,我很难说清楚我的观点,请让我在投票前澄清事情。
答案 0 :(得分:1)
完整的答案取决于编译器的配置方式。存储在指针中的内存位置的前20个字节将对应于结构的name
字段。根据对齐配置,将有0个或更多空字节表示将第二个字段price
放置在对齐边界上的填充。
单字节,两字节和四字节对齐将导致无填充,因为name
的20字节大小可被这些值整除。八字节对齐将导致两个字段之间填充4个字节。
答案 1 :(得分:0)
名为p
的指针尚未初始化,因此它并未指向任何有趣的内容。
您需要在堆上构建一个对象数组:
CAR* p = new CAR[4];
p
现在指向struct
CAR的4个实例的数组;
delete
这个数组delete
包含:
delete [] p;