DAY 13

在C语言中,指针和数组是两个非常重要的概念,它们之间有着密切的联系。

一、地址和指针的概念

  1. 数据存储与读取:在程序中定义一个变量时,编译系统会为其分配内存单元。内存区的每一个字节都有一个编号,即“地址”,相当于旅馆中的房间号。在地址所标志的内存单元中存放数据,通过变量名对内存单元进行存取操作,实际上是通过地址进行的。
  2. 直接访问和间接访问:按变量地址存取变量值的方式称为“直接访问”,例如printf("%d", i);scanf("%d", &i);。另一种方式是“间接访问”,将变量的地址存放在另一个变量中,通过该变量找到变量的地址,再对变量进行存取访问。例如,定义一个指针变量i_pointer来存放整型变量i的地址,通过i_pointer来存取i的值。
  3. 指针和指针变量:一个变量的地址称为该变量的“指针”,如地址2000是变量i的指针。专门用来存放另一变量地址的变量称为“指针变量”,如i_pointer就是一个指针变量,指针变量的值是地址。

二、指针与数组

  1. 指向数组元素的指针
    • 指针的定义与初始化:可以定义一个指针变量指向数组的元素,如int a[10], *p; p = &a[0];,此时p指向数组a的第一个元素。
    • 指针的移动:通过p++等操作可以使指针指向下一个元素,从而遍历数组。
    • 通过指针操作数组元素:可以使用*p来访问指针所指向的元素,并进行赋值等操作,如*p = 1;
  2. 通过指针引用数组
    • 指针与数组的关系:在引用数组时,指针的类型应与数组的类型匹配。数组名可以作为指针来使用,如int a[10], *p = a;,此时p等价于&a[0]
    • 指针的下标运算:可以通过指针的下标来访问数组元素,如p[0]等价于a[0]
    • 指针的遍历:可以使用指针来遍历数组,如for (p = a; p < a + 10; p++)
  3. 数组名作为函数参数
    • 参数传递的本质:当数组名作为函数参数时,传递的是数组的首地址,而不是数组的副本。
    • 函数内部的操作:在函数内部,可以通过指针来操作数组元素,从而实现对数组的修改。
    • 优点:这种方式可以节省内存空间,提高程序的效率,因为不需要复制整个数组。

三、数组与指针的关系

  1. 数组与指针的相似性:数组名可以看作是一个指针常量,它指向数组的首元素。例如,对于数组int a[10]a&a[0]具有相同的地址。
  2. 指针与数组的区别:指针是一个变量,可以进行赋值、移动等操作;而数组名是一个常量,不能进行赋值操作。
  3. 指针在数组中的应用:可以使用指针来遍历数组、访问数组元素、进行数组的排序等操作。例如,通过指针的移动可以方便地实现数组元素的交换,从而实现排序算法。
  4. 数组名与指针的关系:在很多情况下,数组名和指针可以互换使用,但需要注意它们的细微差别。例如,在使用sizeof运算符时,数组名返回的是数组的总大小,而指针返回的是指针本身的大小。

总之,指针与数组的结合使用在C语言中非常重要,可以使程序更加灵活和高效。但在使用指针时需要特别小心,避免出现指针越界、野指针等错误,否则可能会导致程序崩溃或出现不可预料的结果。同时,需要深入理解指针和数组的概念,以及它们之间的关系,才能更好地运用它们来解决实际问题。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值