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

简介: 【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进制地址 二进制
    0x00000000 00000000000000000000000000000000
    0x00000001 00000000000000000000000000000001
    0xFFFFFFFF 1111111111111111111111111111111111111

    我们始终要牢记地址只是用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位大家是不是也也能理解了呢?

    总结🍊

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

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

    如果本文有任何错误或者有疑点欢迎在评论区评论




    目录
    相关文章
    |
    1月前
    |
    存储 C语言
    【C语言篇】深入理解指针3(附转移表源码)
    【C语言篇】深入理解指针3(附转移表源码)
    35 1
    |
    15天前
    |
    C语言
    【c语言】指针就该这么学(1)
    本文详细介绍了C语言中的指针概念及其基本操作。首先通过生活中的例子解释了指针的概念,即内存地址。接着,文章逐步讲解了指针变量的定义、取地址操作符`&`、解引用操作符`*`、指针变量的大小以及不同类型的指针变量的意义。此外,还介绍了`const`修饰符在指针中的应用,指针的运算(包括指针加减整数、指针相减和指针的大小比较),以及野指针的概念和如何规避野指针。最后,通过具体的代码示例帮助读者更好地理解和掌握指针的使用方法。
    41 0
    |
    14天前
    |
    C语言
    【c语言】指针就该这么学(3)
    本文介绍了C语言中的函数指针、typedef关键字及函数指针数组的概念与应用。首先讲解了函数指针的创建与使用,接着通过typedef简化复杂类型定义,最后探讨了函数指针数组及其在转移表中的应用,通过实例展示了如何利用这些特性实现更简洁高效的代码。
    11 2
    |
    15天前
    |
    C语言
    如何避免 C 语言中的野指针问题?
    在C语言中,野指针是指向未知内存地址的指针,可能引发程序崩溃或数据损坏。避免野指针的方法包括:初始化指针为NULL、使用完毕后将指针置为NULL、检查指针是否为空以及合理管理动态分配的内存。
    |
    15天前
    |
    C语言
    C语言:哪些情况下会出现野指针
    C语言中,野指针是指指向未知地址的指针,通常由以下情况产生:1) 指针被声明但未初始化;2) 指针指向的内存已被释放或重新分配;3) 指针指向局部变量,而该变量已超出作用域。使用野指针可能导致程序崩溃或不可预测的行为。
    |
    21天前
    |
    存储 C语言
    C语言32位或64位平台下指针的大小
    在32位平台上,C语言中指针的大小通常为4字节;而在64位平台上,指针的大小通常为8字节。这反映了不同平台对内存地址空间的不同处理方式。
    |
    21天前
    |
    存储 算法 C语言
    C语言:什么是指针数组,它有什么用
    指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
    |
    21天前
    |
    存储 C语言
    C语言指针与指针变量的区别指针
    指针是C语言中的重要概念,用于存储内存地址。指针变量是一种特殊的变量,用于存放其他变量的内存地址,通过指针可以间接访问和修改该变量的值。指针与指针变量的主要区别在于:指针是一个泛指的概念,而指针变量是具体的实现形式。
    |
    22天前
    |
    C语言
    C语言指针(3)
    C语言指针(3)
    11 1
    |
    22天前
    |
    C语言
    C语言指针(2)
    C语言指针(2)
    12 1