众所周知 c语言学习过程当中 指针一直是个重点和难点 ,此帖谈一下我看完《c与指针》等书之后的见解;
希望能帮到大家,内容有不对的欢迎大家指正
目录
一: 内存中数据是如何存储的
- https://www.bilibili.com/video/BV1Rs411c7HG?from=search&seid=5397185164506602840
那为什么叫地址总线而不叫数据总线?这是因为CPU在读取内存中的数据时的第一步是先找到数据的地址,有了地址才能把数据的具体位置找到,然后通过数据总线传输。
就像在商店里买东西,先得找到物品,才能付钱买
2
内存中最小的储存单元是一个字节,可以把这一个个字节看成一个个房间,在这个房间中能储存数据,这些房子会整整齐齐地排成一排。
这个时候就有问题了,CPU应该怎么确定数据是储存在哪个房间呢?这个时候就要靠地址了,可以把这个地址看成房间的号码,显而易见的是每一个房间的号码是必须要是不同的
如8086能寻 1MB的 范围地址(段地址加偏移量,类似下标法寻址法)如debug程序中:
如上图最左边 073F:01bd 就是地址(073f是段地址 冒号右边就是偏移地址) ,右边就是地址中所储存的数据(以16进制显示,两个为一字节)
而我们的数据就是存储在这些地址中,对这些地址中的数据进行操作以达到程序的目的
但跟c语言和指针有什么关系呢?
二:指针是如何寻址的
- https://blog.csdn.net/qq_30120725/article/details/47064035
- movl $666, -8(%rbp) //地址为栈顶以下八个内存单元
2 当我们定义一个变量
- int b = 666;
我们只知道 b的值为666 怎么知道b变量的地址呢 ?
------- 在c语言中 我们可以用 &操作服来获取变量本身的地址
重点来了,当我们定义一个指针变量并初始化
- int *p = &b;