1

假设例如struct

struct Point{
    int x;
    int y;
};

我声明了一个指向这个结构的指针:

Point* p;

x 和 y 在p哪里,堆还是堆栈?

和课程一样吗?

4

3 回答 3

4

where's xand yof that p,堆还是栈?

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

如果您在堆栈上创建一个自动对象,那么它将是:

Point point;
Point * p = &point;

如果你在堆上创建一个动态对象(官方称为free store),那么它就是:

Point * p = new Point; // Don't forget to delete it.

上课也一样吗?

是的; astruct是一个类。

于 2013-10-04T16:10:22.473 回答
1

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

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

于 2013-10-04T15:51:10.750 回答
1

这取决于您如何初始化p. 变量x和指向:如果在堆上,它们在堆上yp如果它在堆栈上,它们就在堆栈上,如果p指向静态变量,它们都不是。

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

而且 C++ 并没有真正的结构:无论使用什么关键字(structclassunion,声明的都是类类型。(类类型可以分为两大类,联合和非联合类类型。)

于 2013-10-04T15:54:42.390 回答