• 【C语言 | 指针】指针和数组关系——剪不断,理还乱


    😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
    🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
    🤣本文内容🤣:🍭介绍C语言指针和数组的关系🍭
    😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭

    本文未经允许,不得转发!!!


    在这里插入图片描述

    🎄一、指针和数组有什么关系

    指针和数组有什么关系呢?

    C语言中,并没有明确规定指针和数组的关系,也就是说,指针和数组实际上并没有什么关系,只是它们的很多用法很相似,才令很多初学者感到困惑。

    定义一个指针变量后,系统会分配一块内存(32位系统是4个字节,64位系统是8个字节)。然后不管这块内存在之后放了什么内容,编译器都会把他当成一个内存地址来处理。指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到。

    数组的本质是一块连续内存区域,里面分成若干个相同大小的内存区域,这些小的内存块就是数组元素。数组的大小与元素的类型和个数有关。定义数组时必须指定其元素的类型和个数。数组可以存任何类型的数据,但不能存函数(但可以存函数指针)。

    在这里插入图片描述

    🎄二、指针和数组名

    数组名就是让初学者混淆指针和数组的一个重要原因。

    上篇文章 提到,数组的数组名其实可以看作一个指向数组首个元素的指针。既然是指针,我们就清楚它关于指针的4个方面内容:指针所在的地址、指针的值、指针的类型、指针所指向的类型。

    • 数组名作为指针所在的地址:数组名本身的地址由编译器另外存储,存储在哪里,我们并不知道;
    • 数组名作为指针的值:是数组首个元素的地址,可以通过 printf 打印出来,会等于&a[0]
    • 数组名作为指针的类型:数组元素类型*
    • 数组名作为指针所指向的类型:数组元素类型。

    下面看例子2.1,看看是怎样混淆的:

    // array_name.c
    #include 
    int main()
    {
    	int arr[5] = {1,2,3,4,5};
    	int *pa = arr; // pa指针指向 arr数组首个元素
    	printf("num1=%d num2=%d unm3=%d\n", *arr, *(arr+1), arr[2]);
    	printf("num1=%d num2=%d unm3=%d\n", *pa , *(pa+1) , pa[2]);
    	pa++;
    	//arr++;  // 保存,数组名的值不能修改
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    pa指针指向 arr数组首个元素之后,下面使用了完全相同的用法,不去看定义的话,都分不清谁是指针,谁是数组。

    那有哪些区别吗?数组名是常量指针,它不能作为左值使用,它的值无法被修改,所以不能使用arr++。

    在这里插入图片描述

    🎄三、指针和数组访问方式

    ✨3.1 以指针的形式访问

    ✨3.2 以下标的形式访问

    在这里插入图片描述

    🎄四

    在这里插入图片描述

    🎄五

    在这里插入图片描述

    🎄六、

    在这里插入图片描述
    如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

  • 相关阅读:
    php:实现字符串补零str_pad()
    Redis Lua沙盒绕过命令执行(CVE-2022-0543)
    Linux基础知识
    商业合作保密协议 (1)
    Scala012--Scala中的常用集合函数及操作Ⅲ
    RK3588 USB WIFI调试
    计算机视觉与深度学习 | 视觉惯性SLAM的基础理论
    理解中国经济的五层思维-中国视角下的宏观经济
    【Spring Boot】拦截器学习笔记
    C++设计模式_06_Decorator 装饰模式
  • 原文地址:https://blog.csdn.net/wkd_007/article/details/134421488