c语言中定义结构体指针并指向一片内存空间和直接定义一个结构体变量的区别 Node *p=(Node *)malloc(sizeof(Node)); 和 Node p 两个有什么区别??? Node是一

发布时间:2024-03-04 08:01

(来自百度解答)

Node *p是定义一个Node结构体指针,指针名为p,指向一个Node结构体,并为这个结构体分配了内存空间

该结构体无命名

Node p是定义一个Node结构体,结构体名为p。

追问:
那两个的用法有什么区别???在内存中分别是怎么存储的???
回答:

结构体指针本质上是指向一个结构体

使用如下例

struct Node{int i;char c;}

Node *P1;

Node P2;

P1->i;

p2.c;

假如该结构体有两个属性 int i;char c;

使用时结构体变量p2直接用点操作符如p2.c;

使用结构体指针p1时用->操作符如P1->i;->操作符即为调用指针指向的变量

 

内存中结构体分配在一段内存地址上,起始地址为结构体指针的值

如Node *p=(Node *)malloc(sizeof(Node));此时p的值即为Node变量在内存中的起始地址

若用Node p声明结构体变量则会随机的在内存中利用剩余空间分配 此时起始地址不可知

一般编译器会预留一段内存地址以便创建变量

 

两种声明分配的内存空间大小相等

 

 

追问:
是不是malloc在堆中开辟空间,而Node p则直接在栈中开辟空间???
回答:

可以这么理解

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号