C语言学习----------第四课(指针究竟是个什么玩意)

其实学习c语言更多的动力就在于指针了,不止一次的听其他人说指针是如何如何的牛逼,如何如何的了不起,直到今天我看完了指针这一章节后,发现指针其实也就是那么回事了。那具体是怎么回事呢,接着往下看吧。
在说指针之前,我们得了解程序是怎么运行的。以一个简单的例子做比较

int a = 3;
int b = 4
int sum = a+b;
out.print(sum);

我们定义了a和b两个int类型的变量并赋值,将a和b的值相加的结果赋予一个新建的int类型的变量sum,然后输出sum的值
OK,计算机怎么来完成这个过程呢?
首先,计算机开辟了三块内存,用来存放a,b,sum的值,赋值的时候,将3赋到a的内存上去,将4赋到b的内存上
。然后在执行加法计算的时候,先去a,b的内存中取出他们对应的值,在CPU中进行加法运算,再把结果赋到sum的内存中。输出的时候,CPU从sum的内存中拿到值后输出。
在这个过程中,我们不止一次的看到,CPU要不停的去变量的内存中取值或者赋值,那具体是怎么操作的呢?这就又不得不去提起汇编了(感谢汇编,程序员的启蒙书籍)。CPU操作内存的方式是使用物理地址来定位读取数据的开始位置的。也就是说,计算机是不知道他能做什么的,他做的所有的操作都是从数据中来的,数据又是CPU根据具体的物理地址从内存中读取出来的。
那么理解上面的过程就好理解了,根据a的物理地址找到a的内存,取值,根据b的物理地址找到b的内存取值,a和b的值相加,根据sum的物理地址找到sum的内存把结果存进去,根据sum的物理地址找到sum的内存,取值,输出。
那么物理地址在哪呢?指针就是了。
一个变量是由两部分组成的,一个是变量的物理地址,一个是变量的具体值。
在C语言中,指针的作用就是用来存储一个变量的物理地址的。
指针其实也是一个变量,只是他存储的值代表的是另一个变量的物理地址而已,那么指针本身也作为一个变量, 也是有自己的物理地址的,那么我再写一个指针指向这个指针的物理地址,就成了二级指针,即指向指针的指针。以此类推,我们还可以再接着创建指向该指针的指针等等等等。
可是到了这里我就又有了一个疑问,物理地址指定了CPU读取数据的开始位置,那怎么确定读取到那个位置停止呢?
在汇编中,程序根据物理地址(c语言中的指针)的指向开始读取数据,然后读取一个完整的数据段后,重新定位物理地址,继续下一个读取任务,往复循环。

说点别的,我们知道,内存中存储的数据都是二进制数据,其实同样的一段数据,我们可以把他当做数据来使用, 也可以当做代码来使用,那么具体是怎么判断的呢,这依赖于计算机和编译语言的底层封装,地址的指向不仅仅只有物理地址这么简单,还有段地址,栈地址等等。物理地址表明数据的开始位置,段地址表明数据的读取长度和读取类型(数据or代码or其他),栈地址表明栈空间,了解了这些之后,再回头去看我们的高级语言就会发现简单了很多。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值