指向非指针变量结构的指针。这些变量,堆或堆栈在哪里?

时间:2013-10-04 15:49:36

标签: c++ variables pointers

例如假设struct

struct Point{
    int x;
    int y;
};

我宣布了一个指向这个结构的指针:

Point* p;

其中是p,堆或堆栈的x和y?

并且课程是否相同?

3 个答案:

答案 0 :(得分:4)

  

那个xy,堆或堆栈的地方是什么?{/ p>

无处。你还没有创建一个对象,只是一个可以指向一个对象的指针。

如果你在堆栈上创建一个自动对象,那就是它的位置:

p

如果你在堆上创建一个动态对象(官方称为免费商店),那就是它的位置:

Point point;
Point * p = &point;
  

课程是否相同?

是; Point * p = new Point; // Don't forget to delete it. 是一个类。

答案 1 :(得分:1)

问题的答案取决于p指向的内容。如果它指向堆栈分配的结构,则p->xp->y在堆栈中。如果它是使用new(或malloc)获得的,那么它们就在堆上。

与其他一些语言不同,C ++类和结构的布局没有区别。它们之间的区别仅在于默认访问限制:默认情况下,class成员是私有的,而struct成员是公开的。

答案 2 :(得分:1)

这取决于您初始化p的方式。变量xy在任何p点都有:如果它在堆上,它们就在堆上;如果它在堆栈上,它们在堆栈上,如果p指向静态变量,它们都不是。

忘记堆和堆栈:这些是编译器的实现细节。你感兴趣的不是位的位置,而是它们可能具有的寿命。

并且C ++实际上没有结构:无论使用哪个关键字(structclassunion),声明的是类类型。 (类类型可以分为两大类,联合类和非联合类类型。)