【C语言】对指针你应该有这些基本理解

前言
🎈大家好,我是何小侠🎈
🌀大家可以叫我**小何或者小侠🌀**
🔴我是一名普通的博客写作者🔴
💐希望能通过写博客加深自己对于学习内容的理解💐
🌸也能帮助更多人理解和学习🌸
🍃我的主页: 何小侠的主页🍃

在这里插入图片描述


    这篇博客我们一起来学习C语言中最经典的部分——指针,虽然不会将所有内容都阐述,但是应该能让你有所收获。
    🍊

    在这里插入图片描述

    指针是什么?🍊

    1. 指针是内存中一个最小单元的编号,也就是地址
    2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量

    总结:指针就是地址,口语中说的指针通常指的是指针变量

    这些大家应该是老生常谈的了。我们要来讲点不一样的!
    首先我们先看一下内存。

    在这里插入图片描述
    我们要对内存有一个基本的了解,在内存中地址是从低到高排列的,每一个基础单元的大小是一个字节,地址其实本来应该是2进制表示,但是二进制太长看起来不方便就用1个16进制位表示4个二进制位。
    上面这段话看起来很简单,但是还是有很多知识点的。
    首先我们介绍一下,有关于内存单位的换算

    内存单位的换算🍊

    在这里插入图片描述

    为什么1个16进制位能表示4个二进制位🍊

    然后我们再来了解一下为什么1个16进制位能表示4个二进制位

    在这里插入图片描述
    看到这个图片应该就很好理解了,大家要记得F = 1111,为什么是4位,因为
    F是16进制的最后一个个位数,如果再+1就变成了十位数,同理二进制也会变成10000。

    地址到底怎么来的🍊

    然后我们介绍一下地址到底是怎么来的。

    首先我们要知道现在市面上的电脑大多都是32位和64位,16位已经算是远古神器了,其实32位都很少很少见了。
    那么32和64到底有什么含义呢?且听我细细道来

    32位电脑主要指的是它的处理器架构用的是32位的架构,这意味着它的CPU只有32条地址线。
    地址线是用来编址(地址)的,
    一根地址线可以产生高电平(高电压),低电平(低电压).
    高电平就是1,低电平就是0。
    但我们一共有32根,也就是说可以产生32个1或0的排列
    比如

    16进制地址二进制
    0x0000000000000000000000000000000000000000
    0x0000000100000000000000000000000000000001
    0xFFFFFFFF1111111111111111111111111111111111111

    我们始终要牢记地址只是用16进制表示起来方便看而不是就是16进制

    那么0x00000000 ~~0xFFFFFFFF一共有多少种可能呢?
    2 ^ 32次方种可能,也就是说一共其实有2 ^ 32 次方个地址
    而每一个地址都是1个字节
    那么2 ^ 32的单位就是字节,我们自己动"手"(计算器)算算如果转换为GB那么是多少呢?
    我这里就用计算器演示一下,其实电脑上的计算器我也不是很会用

    1. 首先我们在16(hexadecimal)进制上输入1 0000 0000
      在这里插入图片描述

    2. 然后再切换为10进制(decimal)
      在这里插入图片描述

    先 / 1024=4194304KB
    在这里插入图片描述

    再/1024= 4096MB

    在这里插入图片描述
    最后得到4GB

    同样我们也可以算出64位电脑能编址多大空间。
    这里直接给出答案,17179869184GB
    但是我们去买电脑的时候不会有这么大内存的电脑,因为内存的造价比较贵,我们一般看到的是16GB,和32GB

    为什么指针又是4个字节又是8个字节呢?🍊

    首先介绍编译器
    在这里插入图片描述
    x86就是32位 x64就是64位

    #include<stdio.h>
    int main()
    {
    
    	int a = 0;
    	int* p = &a;
    	printf("%d", sizeof(p));
    
    
    }
    

    看看这个简单的代码。
    在这里插入图片描述
    这是在x86上得出的
    在这里插入图片描述
    这是在x64上得出的。
    Why?
    在这里插入图片描述

    我们先看32位也就是x86
    在这里插入图片描述
    我们知道一个字节是8个bit位,一个16进制位就是4个bit位,所以一个字节就能存储2个16进制位。
    那么64位大家是不是也也能理解了呢?
    在这里插入图片描述

    总结🍊

    这篇博客我们系统的介绍了指针这一个简单的名词身后所容纳的知识,希望大家也能学到新东西

    最后如果这篇博客有帮助到你,欢迎点赞关注加收藏

    在这里插入图片描述在这里插入图片描述
    如果本文有任何错误或者有疑点欢迎在评论区评论
    在这里插入图片描述

    在这里插入图片描述

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    He XIAO xia

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值