C语言内存管理01(01)

  • int a=10; 的含义

    地址总线&数据总线
    1.在内存中选择了一个区域,命名为a,空间维护4B
    2.CPU首先选择到内存的特定区域,告诉了内存激活这个区域
    3.CPU想数据总线发出10的数据
    4.CPU再发出一个写信号
    5.内存通过数据总线,把10写入第二步激活的区域
    **所谓的声明其实就是告诉C语言内部做了一张映射表 *eg1. a—0x14
    ![[20221019184252.png|120]]

  • 指针 => 内存地址

    内存地址:值(数字->必须发送到地址线) , 操作方式(一次操作多少B)
    靠类型决定地址怎么操作 ```

eg2.      映射表	
int a=10         a  --- int																			        int * p            p    ---    地址 												                                    sizeof  多大?
每个单位的大小																			                          p + 1(单位)---  单位大小* 个数
int a1[ 10 ]           a1 ------数组名(连续空间的首地址)
   							个数
   							每个元素怎么操作
   				数组名;常量
sizeof(p)=8B
sizeof(a1)= 10 * sizeof(int)

void fun (int a2[10]){           //  a2  形参  接收  的是一个地址
                                  a2 是一个数组的标签 相当于一个盒子,盒子的大小是8B/4B 
   sizeof(a2)=8B                 // 64bit系统
}

int main(){
   int b1[10];     //真正的申请空间
   //  传递
   fun(b1); 
}

变量名的本质

○ 对⼀段内存空间,⽅便程序员描述,让编译器可以进⾏正确映射关系的名称
○ 编译器帮程序员,将这段空间访问的代码,翻译成正确的CPU指令
○ 变量名的注意事项:
■ 编译器能够正确识别 => 有效标识符
■ 不能有重复的变量名 => ⼀个变量名代表⼀个专属空间
■ 变量名必须有类型 => 这样空间才有约束
■ 变量名有作⽤域 => 申请空间和释放空间

指针的本质

○ 保存地址的容器,C语⾔的地址和计算机的地址,在定义时发⽣了改变
○ C语⾔地址如何映射到计算机底层的地址:

  • C语⾔地址定义
  • C语⾔只定义了地址的形态,具体怎么⽤,全部交由程序员来处理
  1. 不管越界访问
  2. 不管有没有权限访问
    ○ C语⾔定义地址的访问:
*  ,   []

○多维指针的逻辑模型

int **p;


char buf[3][4][5];   //三个面,每个面四行五列
char(*p2)[4][5];



 int a[2][3];
 int b[2][3];
 int c[2][3];

int (*key)[3]
key = init_kry();     // key = c;

int sum =0;
for(int i =0; i<2; i++){
	for(int j=0 ; j<3 ; j++){
	sum += key[i][j]
	}
}                    //直接让用户输入地址然后呈现,避免直接改代码
			操作方式   a     a+1     3个int   12B
key   是地址    :大小
					操作   key   key+1
	int **key ;          key ------地址
								大小
								操作?  -->一个一个地址的操作
											操作:一个int一个int的操作	
	key   key+1    偏移的是一个地址大小
                                  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tian Meng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值