C语言 结构体指针的内存情况

struct A{
int i;
struct A * pH;

};
void main(){
struct A * p=(struct A *)malloc(sizeof(struct A));
struct A * q=p;
}
大概的以上这么声明,我想知道q指针是如何储存p的地址的。p指向的内存中是否分且只分两块区域(i和*ph)?p指针里是如何存储这块内存的地址的?因为是自己声明的结构体类型,结构体有俩东西,我就晕了,请大神给讲讲指针怎么存储结构体内存的地址的。

结构体变量的内存是依照成员变量的声明连续存放的,一般结构体的大小是其各个成员变量类型大小的总和(指定位域的要另外计算,感兴趣的话你可以自己百度一下结构体位域)。
在32位和64位的机器上,int类型和指针都是32位的,占4个字节。上面声明的结构体变量的内存中,前4字节存放i,后4字节存放pH。
struct A * p=(struct A *)malloc(sizeof(struct A));
malloc的原型声明是void* malloc (size_t),在堆上分配指定大小的内存,并返回指向这块内存的指针。
上面p和q都是指向这块内存空间的指针。
实质上,指针是c、c++中的一种结构型数据类型,和结构体,共用体等一样,属于用户自定义数据类型。指针记录着指向的地址和目标的类型,可以相互赋值。追问

我能加您Q吗?这追问总是提示字数超T T,我的Q是476706568

追答

发送好友请求了。

温馨提示:答案为网友推荐,仅供参考
相似回答