初始化指针结构 - 它在内存中的样子是什么?

时间:2016-12-21 18:35:13

标签: c++

假设我有这段代码

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;
}

指针是否指向内存中的名称位置?

我的英语非常糟糕,我很难说清楚我的观点,请让我在投票前澄清事情。

2 个答案:

答案 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;