[C语言]轻松了解指针

2024-06-04 5919阅读

文章目录

  • 什么是指针?
  • 指针怎么定义?
  • 浅谈底层
  • 总结

    什么是指针?

    要想知道什么是指针,就要知道什么是地址。

    地址在生活中就是一个东西的位置,比如:图图住在翻斗大街翻斗花园二号楼1001室。地址在计算机中就是内存中存储的数据的索引,比如:定义一个变量,那这个变量就在内存中有了自己的地址。

    而指针,就是一种特殊的变量,它存储的是其他变量的内存地址。通过指针,我们可以直接访问和操作这个地址上的数据。换句话说,指针是一种间接访问内存的方式。


    指针怎么定义?

    以下是一段C语言代码,展示了指针的定义和一般使用:

    #include 
    int main()
    {
        //变量一创建操作系统就在内存中给了它一个地址
        int a = 10;
        //通过取地址操作符(&)取出地址
        printf("%p\n",&a);
        //指针变量是用来保存地址的
        int* pa = &a;
        printf("%p\n",pa);
        //通过解引用操作符(*)根据地址找到它
        printf("%d\n",*pa);
        //通过它的地址可以间接访问它,难道你知道npy家的地址找不到ta家?
        *pa = 12;//通过地址间接修改
        printf("%d\n",a);//发现a的值变化了
        return 0;
    }
    

    如果你将上面代码拿到编译器去编译执行,你会得到以下结果:

    000000000062FE14
    000000000062FE14
    10
    12
    

    注意:每次运行操作系统分配给变量的地址都是不同的,这里只需要关注同一个变量,地址是否发生改变


    浅谈底层

    在计算机系统中,数据存储媒介包括硬盘、内存、高级缓存和寄存器等。这些设备在容量和速度上存在显著差异。以下是详细介绍:

    1. 硬盘: 硬盘是计算机的主要辅助存储设备,具有较大的存储容量,可以长期保存大量数据,如操作系统、软件应用程序和用户文件等。然而,硬盘的读写速度相较于其他存储媒介较慢,因为它依赖于机械磁盘的物理旋转和磁头的移动来访问数据。
    2. 内存: 内存是计算机的临时存储设备,用于存放正在运行的程序和处理的数据。它的存取速度比硬盘快得多,因为内存是基于芯片的,没有机械运动部件。但是,内存的容量有限,并且数据是易失性的,即断电后数据会丢失。
    3. 高级缓存: 高速缓存是一种小型但非常快速的内存,位于处理器和主内存之间。它通过存储经常访问的数据来减少处理器的等待时间,从而提高计算机的整体性能。缓存通常由静态随机存取存储器构成,速度非常快,但容量相对较小。
    4. 寄存器: 寄存器是位于CPU内部的最小但最快的存储空间。它们直接参与指令的执行,用于暂存指令、数据地址和数据。每个寄存器的容量非常小,通常只有几个比特到几百个比特,但它们的操作速度是所有存储媒介中最快的。

    [C语言]轻松了解指针 第1张

    根据上面的内容,现在你应该知道了计算机中各存储媒介的差异。

    那程序执行与这些原件有什么关系呢?

    计算机中C语言代码要运行通常经历以下步骤:

    1. 程序编译: 首先,程序员编写的程序代码需要通过编译器转换成机器语言,即一系列可以被计算机硬件直接执行的指令。
    2. 程序加载: 编译后的程序(有时称为可执行文件)在执行前会被加载到内存中。操作系统负责管理这个过程,它会为程序分配一块内存空间。
    3. 内存地址分配: 操作系统将内存中的一部分地址空间分配给程序,这样程序中的每条指令和数据都有了自己的内存地址。
    4. 建立映射: 操作系统确保程序的逻辑地址(如变量名等)映射到相应的物理地址(实际的内存位置)。

    [C语言]轻松了解指针 第2张

    由以上内容可知:

    在程序运行时,操作系统将程序加载到内存中,并为程序中的数据和指令分配具体的内存地址。这些内存地址就是指针所指向的位置。

    换句话说,指针是一种特殊的变量,它存储了内存空间中某个位置的地址,通过这个地址,我们可以访问和操作存储在该位置的数据。因此,指针提供了一种直接访问和操作内存的方式,是C语言和其他一些编程语言中非常关键的概念。


    总结

    1. 指针是内存中一个最小单元的编号,也就是地址。
    2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量。
    3. 我们可以通过&取出变量的内存起始地址,把地址可以存放到一个变量中,这个变量就是指针变量。
    4. 我们可以通过*通过地址间接访问变量,地址是唯一标示一个内存单元的,即每个变量的地址是唯一的,这样可以间接修改变量的值。


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]