C语言学习——指针

C语言指针的学习

本文为学习麦子学院提供的教程所做的笔记。可在b站搜Linux嵌入式ARM开发教程第一阶段,第41节。

C语言的操作方式

  • CPU通过地址总线找到内存中的内容

寻找(寻址)

  • CPU要使用资源需要先通过门牌号找到一个资源,即为寻找(寻址)过程

地址

  • C语言中没有Address,而是pointer,使用pointer来描述地址的概念

指针

  • 指针可以理解为内存资源的地址或者门牌号、标识

内存资源

  • 内存资源即内存类型的资源,包含有内存条、显卡、IIC、USB等设备
  • 内存资源的地址存储在指针中

指针变量

  • 变量:在内存中圈一块地,在地上存东西
    int a;
    a即一块int大小的地。
  • 指针变量:存放指针这个概念的盒子(地)

指针的声明
在声明指针变量时,C语言编译器对存放指针的盒子这一特殊空间存在两种疑问:
1.分配给指针的盒子要多大?
2.盒子里存放的地址所指向的内存的读取方法是什么?

打个比喻:在这里插入图片描述CPU要提取内存条中的资源:
假设内存条里面有很多门牌/ID号,需要将这些门牌号存入CPU中

  1. 设CPU为8bit,则最大可以存入256个不同的门牌号,即装门牌号的盒子最多仅有256的容量
  2. 设CPU为32bit,则最大可以存入2^32个不同的门牌号,即大小为4G

因此可以回答前面的问题:

  • CPU的位数即为盒子的大小
  • 内存的读取方法即为:指针变量前声明的数据类型

比如一个8位的cpu:
char *p;//*p代表一个2^8大小的门牌号,每次从盒子里面读取的数据大小为char(1B)
int *p; //*p代表一个2^8大小的门牌号,每次从盒子里面读取的数据大小为int(4B)

一个32位的cpu:
char *p;//*p代表一个2^32大小的门牌号,每次从盒子里面读取的数据大小为char(1B)
int *p; //*p代表一个2^32大小的门牌号,每次从盒子里面读取的数据大小为int(4B)

总结

  • 对于所有的指针变量来说,其大小跟CPU直接挂钩
  • 指针变量的声明,如char、int等代表的是从指针地址中读取的数据的变量类型,而不是定义的指针的大小
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值