C语言指针学习总结2

本文讲述了指针学习中的关键概念,包括数组名被视为首元素地址,sizeof用于计算数组大小,二级指针用于存储指针变量,以及指针数组的本质。通过实例和解释,帮助读者理解数组和指针在编程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针学习中我们还需要了解一下数组名
对于数组名的理解我们见到过这样的代码

数组名理解

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int* p = &arr[0];

这里我们是想拿到数组首元素的地址但其实数组名就是首元素的地址这里我们写一个代码验证一下
在这里插入图片描述
从这段代码中我们可以看出我们使用取地址符号和直接拿数组名打印出来的地址是相同的。
所以这里我们有个重点请大家牢记

  1. sizeof(数组名)指的是计算整个数组的大小,单位是字节。
  2. &数组名表示的是取出整个数组的地址。
  3. 除此之外,数组名就==首元素地址。

那么有的同学就有疑问了
在这里插入图片描述
为什么这里打印的三个地址是相同的呢?那么arr和&arr究竟有什么区别呢?
在这里插入图片描述
从这张图可以清晰的看到&arr[0]和&arr[0]+1相差四个字节,arr和arr+1相差四个字节,这是因为%arr[0]和arr都是首元素地址,+1就是跳过一个字节。
但是&arr和&arr+1相差四十个字节,这就是因为&arr是数组的地址,+1操作是针对于数组整个加一。
到这里想必大家已经搞清楚数组的意义了。

既然我们学习的是指针这里我们看一下使用指针访问数组

#include <stdio.h>
int main()
{
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr = arr; //指向数组的第一个元素

    for(int i = 0; i < 5; i++) {
    printf("%d ", *(ptr+i)); //输出数组元素
}

这里我们就是借用的指针访问数组内部元素。

二级指针

指针变量也是变量,那我们指针变量放在哪里呢?这个时候我们就需要二级指针来储存指针变量。

这里有一张巨可爱熊清晰的手绘哈哈哈
在这里插入图片描述
这里pp变量就是二级指针,对于⼆级指针的运算有:
*pp 通过对pp中的地址进⾏解引⽤,这样找到的是 p ,*pp 其实访问的就是 p 。

int n = 0;
*pp = &n;//等价于 p = &n;

**pp 先通过 *pp 找到 p ,然后对 p 进⾏解引⽤操作: *p,那找到的是 n 。

**pp = 30;
//等价于*p = 30;
//等价于n = 30;

指针数组

指针数组究竟是指针呢还是数组呢?
我们来类比一下,整型数组是存放整型的数组,字符数组是存放字符的数组,那么指针数组就是存放指针的数组啦。
指针数组中每个元素都是存放指针的
在这里插入图片描述
这里就是指针数组的概念图,希望各位同学可以理解,不懂留在评论区!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值