【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位大家是不是也也能理解了呢?

    总结🍊

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

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

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




    目录
    相关文章
    |
    2月前
    |
    C语言
    【c语言】指针就该这么学(1)
    本文详细介绍了C语言中的指针概念及其基本操作。首先通过生活中的例子解释了指针的概念,即内存地址。接着,文章逐步讲解了指针变量的定义、取地址操作符`&`、解引用操作符`*`、指针变量的大小以及不同类型的指针变量的意义。此外,还介绍了`const`修饰符在指针中的应用,指针的运算(包括指针加减整数、指针相减和指针的大小比较),以及野指针的概念和如何规避野指针。最后,通过具体的代码示例帮助读者更好地理解和掌握指针的使用方法。
    52 0
    |
    15天前
    |
    存储 NoSQL 编译器
    【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
    指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
    70 3
    【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
    |
    15天前
    |
    存储 编译器 C语言
    【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
    在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
    43 9
    |
    15天前
    |
    安全 程序员 C语言
    【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
    在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
    40 7
    |
    26天前
    |
    存储 C语言
    C语言如何使用结构体和指针来操作动态分配的内存
    在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
    92 13
    |
    19天前
    |
    存储 程序员 编译器
    C 语言数组与指针的深度剖析与应用
    在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
    |
    19天前
    |
    算法 C语言
    C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项
    本文深入讲解了C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项,通过实例演示了文件操作的基本流程,帮助读者掌握这一重要技能,提升程序开发能力。
    61 3
    |
    20天前
    |
    存储 算法 程序员
    C 语言指针详解 —— 内存操控的魔法棒
    《C 语言指针详解》深入浅出地讲解了指针的概念、使用方法及其在内存操作中的重要作用,被誉为程序员手中的“内存操控魔法棒”。本书适合C语言初学者及希望深化理解指针机制的开发者阅读。
    |
    26天前
    |
    存储 C语言 开发者
    C 语言指针与内存管理
    C语言中的指针与内存管理是编程的核心概念。指针用于存储变量的内存地址,实现数据的间接访问和操作;内存管理涉及动态分配(如malloc、free函数)和释放内存,确保程序高效运行并避免内存泄漏。掌握这两者对于编写高质量的C语言程序至关重要。
    49 11
    |
    19天前
    |
    程序员 C语言
    C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门
    C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门。本文深入探讨了指针的基本概念、声明方式、动态内存分配、函数参数传递、指针运算及与数组和函数的关系,强调了正确使用指针的重要性,并鼓励读者通过实践掌握这一关键技能。
    33 1