当前位置 博文首页 > m0_51723227的博客:C语言指针

    m0_51723227的博客:C语言指针

    作者:[db:作者] 时间:2021-08-09 10:01

    c语言指针到底是什么???

    为了更好的解释指针,在这里我们首先弄清楚一些概念

    1.bin(比特位)是什么? bin,byte关系

    2.如何产生地址?

    3.数据存储的最小存储单位?


    问题一:

    • 大家都知道,我们日常生活中所用的电流分为两种:直流电交流电

    而直流电普遍用于电池,我们其他的电器(只要需要插头充电的)几乎都是需要交流电,交流电分为正电负电

    我们的电脑亦如此,因此聪明的科学家想到这点,使电脑用二进制编程,0代表负电,1代表正电.不同的正负电组合(不同的二进制排序)可以带来和储存不同信息,即我们经常听到的电信息, 而只用来存储0和1这种信息的一个空间就是一个比特位

    存储大小的换算:

    • 1 byte = 8 bit
    • 1 KB = 1024 byte
    • 1 MB = 1024 KB
    • 1 GB = 1024 MB

    问题二:

    我们国家有960万平方公里,而这么大一个地方想要具体到某个地方进行查找,肯定需要给每个地方赋予独一无二的称号(地址),比如四川省达州市XX广场XX公寓XX号, 而我们的电脑存储数据也是这样,给一个大地方划分区域,然后编号.就是地址

    问题三:

    买电脑时候,会看到内存大小,比如4G 8G 16G(相当于中国的国土面积),

    这里我们给定一个空间,然后将其划分为最基本的小单元,那么什么是该空间数据的最小存储单元呢?以机器32位为例:

    • bin吗?

    如果是bin,那么 2^32 = 4294967296 = 536870912 Byte = 524,288 Kb = 512 MB = 0.5 GB

    计算看到,如果以bin为最小存储单元,那么最大占用才0.5GB,即使有4GB 8GB 16GB空间也是浪费.

    所以不是.

    • 是byte吗?

    如果是Byte的话就是0.5GB * 8 = 4GB,那么就差不多了.

    所以就是说数据的最小存储单位是Byte(字节)

    图例:

    image-20210213153835567

    那么,指针是什么呢???如图所示,指针就是该编号(也就是内存地址)

    而用来存储指针的变量称为指针变量

    代码示例:

    #include <stdio.h>
    int main()
    {
        int a = 10;
        int* p = &a;
    	/*打印a的内容*/
        printf("%d\n", a);
        
        /*打印指针变量p的内容,但是以加前缀16进制显示*/
        printf("%#x\n", p);
        
        /*打印整数a指针的内容*/
        printf("%p\n", &a);
        printf("%#x\n", &a);
        
        /*修改a的值,打印a的内容*/
        *p = 20;
        printf("%d\n", a );
        return 0;
    }
    
    
    运行结果:
    10
    0x61fe14
    000000000061FE14
    0x61fe14
    20
    
    

    使用图来解释上述的运行过程:

    image-20210213161053907

    cs