指针初始化的这两种方式有什么区别?

wow334 2019-05-14 06:57:47

1.
struct Book * head = (struct Book*)malloc(sizeof(struct Book));


2.


struct Book book1;

struct Book * head =&book1;
...全文
256 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
636f6c696e 2019-05-26
  • 打赏
  • 举报
回复
栈内存和堆内存的区别 前者作用域只在函数体内,后者只要你不手动释放永久存在 堆内存使用完需要手动释放,而栈内存不需要
qq_40667856 2019-05-22
  • 打赏
  • 举报
回复
第一种是动态分配内存,从heap(堆)中
而第二种只是将指针指向系统栈中自动分配好的一个变量
636f6c696e 2019-05-16
  • 打赏
  • 举报
回复
一个在栈上一个在堆上,使用方法生命周期都是不一样的
自信男孩 2019-05-16
  • 打赏
  • 举报
回复
指针的指向的内存不一样,一个是指向堆上的空间,一个是指向栈(如果book1是局部变量)上的,
那么作用域也不一样的,生命周期也不一样。
冷风1023 2019-05-16
  • 打赏
  • 举报
回复
引用 4 楼 冷风1023 的回复:
1、首先你应该去理解下存储方式,有栈、堆、静态区、常量区、程序自由区,常用到的就是栈、堆、静态区。你第一种方法就存储在堆里要手动申请内存手动释放,第二种都存在于栈里超出代码块范围自动释放。
2、你第一种和第二种都是声明一个指针变量,这点都是一样的,区别在于指针指向的内存不一样。就好比两个长的一样的钥匙,一个是用来开自行车锁的,一个是开门锁的。

不好意思你应该先了解2再了解1
冷风1023 2019-05-16
  • 打赏
  • 举报
回复
1、首先你应该去理解下存储方式,有栈、堆、静态区、常量区、程序自由区,常用到的就是栈、堆、静态区。你第一种方法就存储在堆里要手动申请内存手动释放,第二种都存在于栈里超出代码块范围自动释放。
2、你第一种和第二种都是声明一个指针变量,这点都是一样的,区别在于指针指向的内存不一样。就好比两个长的一样的钥匙,一个是用来开自行车锁的,一个是开门锁的。
CaptainXue 2019-05-14
  • 打赏
  • 举报
回复
作用上没有什么区别;前者是动态申请的内存,需要手动收回;后者是让指针指向一个BOOK类型的book1变量,超过变量的作用域后,内存就自动释放!
AlbertS 2019-05-14
  • 打赏
  • 举报
回复
第一种是动态申请,指针所指向的内存在堆上,用完后需要手动回收
第二种指针指向的内存空间在栈上,超出book1变量的作用域后,内存被回收

第一种可以申请大内存
第二种在栈上的内存可以申请的较小,通常是几兆,看具体环境和配置
GarfieldGCat 2019-05-14
  • 打赏
  • 举报
回复
第一种方式是申请了一个动态内存,让指针指向该动态内存,这一块动态内存的生存期为程序的生存期或知道你主动释放为止。 而第二种则是让指针指向一个变量,变量的生存期同普通局部变量没什么区别。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧