C++的结构问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 10:49:28
struct aa
{int a;
int b;
};
void main()
{aa *p;
}
请问执行aa*p时,系统会帮p指针分配8个空间,用于存放结构体的两个成员还是只分配一个空间,这个空间存放一个结构指针,指向结构体

执行aa *p;只分配一个空间,这个空间存放一个结构指针,指向结构体。
因为注意你创建的是一个结构体指针。指针默认在机器中为4个字节。
而如果你使用aa a1;则会占用8个字节,其中这8个字节表现在2个int(每一个int在32位机器上为4字节)。
你这个问题只是询问的是结构体指针和结构体对象的占用空间区别。另外在使用时,通常要考虑对齐原则,来获取字节大小,你可以利用sizeof()来获取变量占用空间大小。。

第二个

楼上的 回答者: wxc2009hi
回答的基本都对,尤其是最后两行,补充的很好。
不过有个地方需要说明的是 “指针默认在机器中为4个字节” 这句话:
指针是长整形,所以 32位机器是4字节,64位机器是8字节

aa *p;
这句只是声名了一个aa*类型的对象。无初始化。
对于指针对象而言,32位机器里都是4字节的。所以系统会在栈内分配4字节,p压栈,不初始化。
而如果有形如
aa* p2=new aa;
时,这时系统依然在栈上分配4字节。但是new 操作符会导致系统在堆上分配sizeof(aa)大小的内存,用于保存一个使用默认构造函数初始化的aa类型的对象。用这个无名的对象的地址初始化p。