详解指针2
上期内容我们已经学习了指针的基础知识,本期博主给大家分享一下指针的进阶内容继续深入了解指针;
大纲
一、数组名的理解
举个栗子,便于更好的理解:
我们发现&arr和&arr[0]拿到的地址是一样的;因此我们可以得出一个结论:
数组名==数组首元素地址
接下来我们继续分析代码:
大家都了解了数组名==数组首元素地址,一个整型占4个字节;那么答案就是4/8;答案是40;
注意:数组名==数组首元素地址是成立的,但是有两个例外:
- sizeof(数组名):sizeof中单独存放数组名,这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节;
- &数组名:这里的数组名表示整个数组,取出的是整个数组的地址;
二、使用指针访问数组
通过调试代码,我们发现数组名arr是数组⾸元素的地址,可以赋值给p,其实数组名arr和p在这⾥是等价的。
通过调试代码将*(p+i)换成p[i]也是能够正常打印的,所以本质上p[i] 是等价于 *(p+i)。同理arr[i] 应该等价于 *(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移 量求出元素的地址,然后解引⽤来访问的。
三、一维数组传参的本质
四、冒泡排序
冒泡排序的核⼼思想就是:两两相邻的元素进⾏⽐较。
接下来我们使用代码来实现这个过程:
方案一:
方案二:
五、二级指针

六、指针数组
指针数组到底是指针还是数组呢?
答案是数组;是用来存放指针的数组。
指针数组的每个元素都是⽤来存放地址(指针)的。
指针数组的每个元素是地址,⼜可以指向⼀块区域;
总结
本文深入讲解了指针的进阶知识,重点包括:1)数组名的特殊含义,指出数组名通常代表首元素地址,但在sizeof和&操作时例外;2)指针访问数组的原理,解释p[i]等价于*(p+i)的底层实现;3)一维数组传参的两种形式(数组和指针);4)冒泡排序的实现原理;5)二级指针的概念及其存储指针变量地址的作用;6)指针数组的定义和用途。文章通过代码示例和内存分析,帮助读者深入理解这些关键指针概念。
转眼间又要和大家说再见了,以上就是博主要给大家分享的所有内容了;希望大家能有所收获,可以的话请三连支持一下;你的支持是我持续创作最大的动力;