指向非指针变量结构的指针。这些变量在哪里,堆还是堆栈?
pointer to struct of non-pointer variables. where're these variables, heap or stack?
假设例如这个struct
:
struct Point{
int x;
int y;
};
我声明了一个指向此结构的指针:
Point* p;
该p
、堆或堆栈的 x 和 y 在哪里?
上课也一样吗?
x
和y
p
、堆或堆栈在哪里?
无处。您尚未创建对象,只是创建可指向一个对象的指针。
如果您在堆栈上创建一个自动对象,那么它将位于:
Point point;
Point * p = &point;
如果您在堆上创建一个动态对象(正式称为免费商店),那么它将位于:
Point * p = new Point; // Don't forget to delete it.
上课也一样吗?
是的;struct
是一个类。
问题的答案取决于p
指向的内容。如果它指向堆栈分配的结构,则堆栈上p->x
和p->y
。如果它是用new
(或malloc
)获得的,那么它们就在堆上。
与其他一些语言不同,C++类和结构的布局没有区别。它们之间的区别仅在于默认访问限制:默认情况下class
成员是私有的,而struct
成员是公共的。
这取决于
您如何初始化p
。 变量x
和y
位于p
指向的任何中:如果它在堆上,则它们在堆上;如果它在堆栈上,则它们在堆栈上,如果p
指向静态变量,则它们都不是。
忘记堆和堆栈:这些是编译器的实现细节。 您感兴趣的不是位的位置,而是它们可能具有的生命周期。
而且C++并没有真正的结构:无论使用什么关键字(struct
、class
或union
),声明的都是类类型。 (类类型可以分为两大类:联合类和非联合类类型。
相关文章:
- 指针变量在 cout 函数中不起作用
- 如何将指针变量作为引用参数传递?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 我试图了解在异或操作后指针变量正在更改
- 调用带有指针对象错误的指针变量
- 如何在 cuda 中将结构的指针变量从主机复制到设备
- 非指针变量和类成员上的新放置
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- 全局外部指针变量在 DLL 中不可见
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- C++ 中指针变量的内存释放
- 使用指针变量打印特定的数组变量
- 如何使用构造函数初始化内存地址(指针变量)?
- 如何释放为指针变量本身提供的内存?
- 如果地址已知,如何获取指针变量的名称
- 如何处理参数中的基类和指针变量
- 指针变量 在数组中定位零
- 隐式指针变量,在自动定义中具有另一个指针变量
- 为什么可以将Char指针变量初始化为字符串,而INT指针变量不能初始化到整数数组
- 错误 C4703 可能未初始化的局部指针变量'y'使用