传智播客C语言提高——内存四区

知识点

内存四区的建立流程
在这里插入图片描述
流程说明
1、操作系统把物理硬盘代码load到内存
2、操作系统把c代码分成四个区
3、操作系统找到main函数入口执行

内存四区的建立流程

在这里插入图片描述
如果两个静态变量的值一样,在C++中编译器会自动优化,将两个变量的地址搞成一样的

栈的开口方向可以测试出来,测试release和debug一般不一样;一般认为开口向下,栈开口向下是为了压栈的过程中内存溢出(从大到小压),

char[128]无论栈开口向上还是向下,buf都是向上的(向小向大变化),栈的生长方向和buf的增长方向是两个不同的概念;

铁律1:指针是一种数据类型
1) 指针也是一种变量,占有内存空间,用来保存内存地址
测试指针变量占有内存空间大小
2)*p操作内存
在指针声明时,*号表示所声明的变量为指针
在指针使用时,号表示 操作 指针所指向的内存空间中的值
p相当于通过地址(p变量的值)找到一块内存;然后操作内存
p放在等号的左边赋值(给内存赋值)
p放在等号的右边取值(从内存获取值)
3)指针变量和它指向的内存块是两个不同的概念
//含义1 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;p = p +1; //p++
//含义2 给
p赋值
p=‘a’; 不会改变指针变量的值,只会改变所指的内存块的值
//含义3 =左边
p 表示 给内存赋值, =右边
p 表示取值 含义不同切结!
//含义4 =左边char *p
//含义5 保证所指的内存块能修改
4)指针是一种数据类型,是指它指向的内存空间的数据类型
含义1:指针步长(p++),根据所致内存空间的数据类型来确定
p++=(unsigned char )p+sizeof(a);
结论:指针的步长,根据所指内存空间类型来定。

注意: 建立指针指向谁,就把把谁的地址赋值给指针。图和代码和二为一。
不断的给指针变量赋值,就是不断的改变指针变量(和所指向内存空间没有任何关系)。
使用malloc申请内存之后一定要先判断是否申请内存成功,因为很多函数或操作符的规定指针不能指向NULL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值