[C语言]指针的顶级理解(从底层实现理解)

本文深入浅出地介绍了C语言中的指针概念及其在内存管理中的应用,特别是malloc函数的工作原理。文章探讨了指针的基础知识、内存区域划分、malloc函数特性,并通过实例解释了如何正确使用指针来避免内存泄漏等问题。

基础

首先简单介绍一下我认为指针比较基础的东西,指针指向一片地址,指针的值是这片地址的值(一般是32bits如0x000014FA,0x为16进制,十六进制下的一位等于4bit),指针本身也有地址,但和指针的值是完全两个东西,用指针可以对指针指向的地址上保存的值进行修改,注意,这完全是两个东西,计算机内存中的地址就像是盒子的编号(计算机本身自带),而地址上存的值就像是盒子内保存的东西,比如说这样
0x00000000(地址) 00000020 (值,32,这里为了方便写成16进制)
0x00000001 <—(指针的值就是这类东西)
0x00000002
假设有一个指针ptr,那么*ptr就可以表示指针指向的地址上所保存的值,可以作为左值,也就是说可以修改这片地址上所保存的值,&ptr就表示指针的地址,建议初学者把ptr和 *拆分开来看,int *ptr只是告诉你声明了一个变量ptr,这个ptr指向一个int类型(ptr的值上存的是int)
在这里插入图片描述

(都是干货)
还有指针数组,数组指针一些比较简单的结构,建议自行了解,只要注意ptr先和括号还是 * 结合就很容易看懂具体是什么
在这里插入图片描述

OK,下面进入正题,对指针的高阶理解,建议前面没看懂的先自学,对指针有初步了解后再往下看

C的内存设计(C Memory Management)

在这里插入图片描述
内存被分为四块,栈(stack),堆(heap),静态数据(static data),代码(code)
在这里插入图片描述

其中栈保存的是局部变量,比如说在函数里定义的变量,他们的作用于仅限在函数内,它的存放方式是从上往下的;堆保存的是动态数据,通常是malloc函数分配的;静态数据保存在函数外定义的数据;代码保存所需执行的代码,只有在程序运行时才从内存中读取

对,你没有听错,内存也不是计算机跑代码的地方,充其量只是一个仓库,在运行的时候执行时需要一点读一点(具体可以关注我之后会出的RISC-V的教程,以伯克利CS61C课程为模板为各位介绍,话说今年不出意外的话,应该会到伯克利EE department深造,以后会更新更多高质量的内容,关注走一波)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值