【初阶指针 3 --从入门到入土--指针和数组】

本文介绍了指针与数组的关系,强调数组名是首元素地址,可以通过指针遍历数组。接着讲解了二级指针的概念,如何通过二级指针访问一级指针所指向的变量。最后,阐述了指针数组的定义,它是存放指针的数组,不同于数组指针。
摘要由CSDN通过智能技术生成

本文标签:  指针和数组  二级指针

这篇就是初阶指针的最后一章啦,学完这一章节咱们就可以到我们指针入土环节啦,也会对指针的认知到达一个新的高度.


前言

了解这些知识: 初阶指针1,初阶指针2, 这篇文章才能更好食用哦.


一、指针和数组

1.关于数组名是什么,其实我们在上两篇文章反复强调过了,数组名就是首元素地址. (敲黑板!,记住了!)  

如下代码验证这一结论:

可以看到,arr 数组名打印的地址和 arr 首元素地址的打印是一样的.

2.那么我们如果这样写代码是否可行呢:(%p打印地址)

我们看到, &arr[i]产生的地址和p 是首元素地址如果循环 +i ,产生的就是数组中下标为 i 这个元素的地址是相等的.

3.那我们就可以直接通过指针来访问数组, 遍历数组, p+i 产生的地址进行解引用就会得到下标为 i 这个元素.

如下代码:

 4.我们知道 arr[2]  和  *(p+2)是等价的,因为加法支持交换律,所以有可以写成  *(2+p)  ,我们还知道 p 里面放的是 arr 的首元素地址,所以 p 和 arr 是一样的,所以 还可以写成 *(2+arr)  .

同时, *(2+arr) 还可以写成 2[arr]  ,因为 [ ] 是一个操作符,这里的 2 和 arr 只是 [ ] 的两个操作数, arr+2 支持加法交换律可以写成 2+arr ,所以*(arr+2)还可以写成 2[arr] ,这么做也时因为在操作系统执行语句时会将 arr[2] 转换为 *(arr+2)  ,故 arr[2] ==*(arr+2) == *(2+arr) == 2[arr] .在这里因为 arr 时首元素地址,将它传给了 p ,所以这里的 arr 同样也可以用 p 来代替.

如下代码:

二、二级指针

如上代码, pa 是一个指针变量,里面存放的是 a 的地址,同样 pa 是变量同样也要在内存中开辟空间,所以我们也可以对 pa 取地址,取出的是 pa 在内存中的地址,它也要存放到指针变量中,如上代码指针变量 ppa ,它的指向对象是 pa 的地址,而 pa 的地址又指向整型变量 a ,所以也要是一个整型变量,它的写法就是  int* *ppa ,这两个 * 的意思是不一样的, *ppa 代表 ppa 是一个指针变量,它指向对象 pa 的类型是 int* ,在这里 * *ppa == a. 我们就把 ppa 叫做二级指针变量.

三、指针数组

指针数组是指针还是数组?

答案:是数组,是存放指针的数组,数组我们知道分为整型数组和字符数组.  (注意!指针数组和数组指针是两回事!)

我们可以这样理解:比如

 整型数组----- int arr[10] 代表的是一个整型数组,它是一个存放整形的数组.

 字符数组----- char ch[5] 代表的是一个字符数组,它是一个存放字符的数组.

  指针数组----- 那我们就可以将它理解为一个存放指针的数组.

代码如下(示例):

 

 指针数组的类型要和数组里面的元素类型一样,数组的每个元素是整型指针,指针类型就是 int* ,元素类型是字符指针,它的指针类型就是 char*.(不要和数组指针搞混了哦.)


总结

---- 指针和数组

---- 二级指针

---- 指针数组

都看到这了来个一键三连呗~  如有不足还望指出.

 

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 38
    评论
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值