首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >深⼊理解指针(3)【数组与指针】

深⼊理解指针(3)【数组与指针】

作者头像
用户11970727
发布2025-12-30 15:28:14
发布2025-12-30 15:28:14
1500
举报
文章被收录于专栏:C语言C语言

Hello大家好! 很高兴与大家见面! 给生活添点快乐,开始今天的编程之路。

一 数组名的理解

由上图可知我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,⽽且是数组⾸元素的地址,以前我们只写数组名是为了方便理解。

那是不是不管在哪里数组名就是数组⾸元素(第⼀个元素)的地址呢?

输出的结果是:40,如果arr是数组⾸元素的地址,那输出应该的应该是4/8才对。 其实数组名就是数组⾸元素(第⼀个元素)的地址是对的,但是有两个例外:

sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩, 单位是字节。

&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的)

除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。

那arr和&arr有啥区别呢?

这⾥我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1 相差4个字节,是因为&arr[0] 和 arr 都是⾸元素的地址,+1就是跳过⼀个元素。

但是&arr 和 &arr+1相差40个字节,这就是因为&arr是数组的地址,+1 操作是跳过整个数组的。

二 使⽤指针访问数组

将*(p+i)换成p[i]也是能够正常打印的,所以本质上p[i] 是等价于 *(p+i),同理arr[i] 应该等价于 *(arr+i),数组元素的访问在编译器处理的时候,是转换成⾸元素的地址+偏移量求出元素的地址,然后解引⽤来访问。

三 ⼀维数组传参的本质

# include <stdio.h> void test ( int arr[]) { int sz2 = sizeof (arr)/ sizeof (arr[ 0 ]); printf ( "sz2 = %d\n" , sz2); } int main () { int arr[ 10 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 }; int sz1 = sizeof (arr)/ sizeof (arr[ 0 ]); printf ( "sz1 = %d\n" , sz1); test(arr); return 0 ; }

void test ( int arr[]) // 参数写成数组形式,本质上还是指针 { printf ( "%d\n" , sizeof (arr)); } void test ( int * arr) // 参数写成指针形式 { printf ( "%d\n" , sizeof (arr)); }

总结:⼀维数组传参时,形参的部分可以写成数组的形式,也可以写成指针的形式。本质上数组传参传递的是数组⾸元素的地址

四 冒泡排序(后续还会更新更多排序)

核⼼思想: 两两相邻的元素进行比较。

例如;将一个数组排成升序。

五 ⼆级指针 【指针有三级、四级等只是⼆级相对常用】l

1 作用:类比于一级指针的1作用,我们便会想到二级指针的作用是用来存放一级指针变量的地址。

2 对于⼆级指针的运算

int a=10; int *pa=&a; int ** ppa=&pa;

• *ppa 通过对ppa中的地址进⾏解引⽤,这样找到的是 pa , *ppa 其实访问的就是 pa 。

int b = 20 ; *ppa = &b;//等价于pa=&b;

•**ppa 先通过 *ppa 找到 pa ,然后对 pa 进⾏解引⽤操作: *pa ,那找到的是 a。

**ppa = 30 ; //等价于*pa = 30; //等价于a = 30;

六 指针数组

1定义:指针数组顾名思义就是用来存放指针的数组。指针数组的每个元素都是⽤来存放地址(指针)的。

七 指针数组模拟⼆维数组

1限制:每个数组元素个数一样,不一样最好别用很麻烦。

2实现方式:

用数组的个数来代替行数,只要得到每个数组首元素的地址便可以得到数组存储的数据,而数组中元素的个数用来代表尼斯列数。所以每个数组元素个数一样,不一样最好别用很麻烦。

本篇文章就到此结束,希望有所能帮到 读者更好的了解指针,后续还会继续更新指针相关识。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 数组名的理解
  • 二 使⽤指针访问数组
  • 三 ⼀维数组传参的本质
  • 四 冒泡排序(后续还会更新更多排序)
  • 五 ⼆级指针 【指针有三级、四级等只是⼆级相对常用】l
  • 六 指针数组
  • 七 指针数组模拟⼆维数组
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档