c语言中定义结构体指针并指向一片内存空间和直接定义一个结构体变量的区别 Node *p=(Node *)malloc(sizeof(Node)); 和 Node p 两个有什么区别??? Node是一
2013-07-23 23:41
1011 查看
(来自百度解答)
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则直接在栈中开辟空间???
回答:
可以这么理解
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则直接在栈中开辟空间???
回答:
可以这么理解
相关文章推荐
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- C语言学习7 :二级指针定义,强制转换,多级指针初步,6级指针构造,错误应用*p=&a,错误应用 二级p2,void型指针的兼容性,malloc函数基本用法,malloc分配空间和堆栈空间的区别,验证malloc函数内存的分配,验证malloc函数的越界,内存泄漏,指针不能返回局部变量地址,内存分配
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- C语言之指针专题一:指针变量和指针所指向的内存空间是两个不同的概念
- 两个指针指向同一个由malloc分配的空间,free掉一个问题
- C语言之指针专题一:指针变量和指针所指向的内存空间是两个不同的概念
- #defind 语句也可以定义绝对内存空间,用以指向一个固定的字
- 3.定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同打
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
- 3 定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同
- 定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同打印G
- 【c语言】编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间
- c语言:sizeof的使用,其不是函数,是一个操作符关键字,定义一个数组arr,输出arr和&arr的区别
- Java中堆内存和栈内存_在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)。修改栈指针就可以把栈中的内容销毁.这样最快
- 定义一个结构体指针需要分配存储空间?
- 定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同打印G
- C/C++ 错误笔记-在给结构体中的指针赋值时,要注意该指针是否已指向内存空间
- 不使用第三个内存空间,转换两个变量的值。(C语言老师提问!)
- C语言中定义变量(储存区 栈)和用malloc(动态分配 堆)的区别