• C语言——I /深入理解指针(一)


    一、内存和地址

    1. 1byte(字节) = 8bit(比特位)
    2. 1KB = 1024byte
    3. 1MB = 1024KB
    4. 1GB = 1024MB
    5. 1TB = 1024GB
    6. 1PB = 1024TB
    7. 一个比特位可以存放二进制的0/1的一位

    ⽣活中我们把⻔牌号也叫地址,在计算机中我们把内存单元的编号也称为地址。C语⾔中给地址起了新的名字叫:指针。
    所以我们可以理解为:内存单元的编号 == 地址 == 指针
     

    二、指针变量和地址

    1、指针变量

    指针变量也是⼀种变量,这种变量就是⽤来存放地址的,存放在指针变量中的值都会理解为地址。

    2、拆解指针类型

    我们看到pa的类型是 int* ,我们该如何理解指针的类型呢?

    1. int a = 10;
    2. int * pa = &a;

    这里 pa 左边写的是 int* , * 是在说明pa是指针变量,而前面的 int 是在说明pa指向的是整型(int)类型的对象。

    3、解引用操作符

    我们将地址保存起来,未来是要使⽤的,那怎么使⽤呢?
    在现实⽣活中,我们使⽤地址要找到⼀个房间,在房间⾥可以拿去或者存放物品。
    C语⾔中其实也是⼀样的,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针)指向的对象,这⾥必须学习⼀个操作符叫解引用操作符(*)。

    1. #include
    2. int main()
    3. {
    4. int a = 100;
    5. int* pa = &a;
    6. *pa = 0;
    7. return 0;
    8. }

    上⾯代码中第7⾏就使⽤了解引⽤操作符, *pa 的意思就是通过pa中存放的地址,找到指向的空间,*pa其实就是a变量了;所以*pa = 0,这个操作符是把a改成了0。
    其实这⾥是把a的修改交给了pa来操作,这样对a的修改,就多了⼀种的途径,写代码就会更加灵活。


    4、指针变量的大小

    32位机器假设有32根地址总线,每根地址线出来的电信号转换成数字信号后是1或者0,那我们把32根地址线产⽣的2进制序列当做⼀个地址,那么⼀个地址就是32个bit位,需要4个字节才能存储。如果指针变量是⽤来存放地址的,那么指针变的⼤⼩就得是4个字节的空间才可以。
    同理64位机器,假设有64根地址线,⼀个地址就是64个⼆进制位组成的⼆进制序列,存储起来就需要8个字节的空间,指针变的大小就是8个字节。

    32位

    64位

    总结:

    • 32位平台下地址是32个bit位,指针变量⼤⼩是4个字节
    • 64位平台下地址是64个bit位,指针变量⼤⼩是8个字节
    • 注意指针变量的⼤⼩和类型是⽆关的,只要指针类型的变量,在相同的平台下,⼤⼩都是相同的。
     

    三、指针变量类型的意义

    四、const修饰指针

    五、指针运算

    六、野指针

    七、assert断言

    八、指针的使⽤和传址调⽤
     

  • 相关阅读:
    【ACWing】139. 回文子串的最大长度
    Pyparsing模块使用介绍
    python3 可变对象与不可变对象
    clickhouse 业务日志告警
    APP如何实现「年轻化」的需求?
    PMP证书在国内已经泛滥了,大家怎么看?
    MySQL—MySQL架构
    【二:Spring-AOP】
    Windows cmd,dos 命令行的bat文件定时备份数据库数据(详细例子介绍dos延时)
    数据结构——快速排序的优化
  • 原文地址:https://blog.csdn.net/weixin_56641478/article/details/134433568