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

pointer to struct of non-pointer variables. where're these variables, heap or stack?

本文关键字:指针 变量 在哪里 堆栈 结构      更新时间:2023-10-16

假设例如这个struct

struct Point{
    int x;
    int y;
};

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

Point* p;

p、堆或堆栈的 x 和 y 在哪里?

上课也一样吗?

xy p、堆或堆栈在哪里?

无处。您尚未创建对象,只是创建可指向一个对象的指针。

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

Point point;
Point * p = &point;

如果您在堆上创建一个动态对象(正式称为免费商店),那么它将位于:

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

上课也一样吗?

是的;struct是一个类。

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

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

这取决于

您如何初始化p 。 变量xy位于p指向的任何中:如果它在堆上,则它们在堆上;如果它在堆栈上,则它们在堆栈上,如果p指向静态变量,则它们都不是。

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

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