C语言之拿下指针(中)

目录

1.数组名的理解

2.使用指针访问数组

3.一维数组传参的本质

4.二级指针

5.指针数组

6.指针数组模拟二维数组


1.数组名的理解

当我们刚开始学习指针时学过用指针访问数组,有这样一段代码:

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

此时p中放的就是数组中首元素的地址,其实数组名就是数组首元素的地址,但是有两个例外:

1:sizeof(数组名)

2:&(数组名)

上面两种形式的数组名都表示整个数组,此外的数组名都表示数组首元素的地址。

那如何验证呢?如图:

此时上面三种情况的输出结果完全相同,那为什么说&arr取的是整个数组的地址跟其他的不一样呢?我们不妨将其都+1后移一位试一下:

如上图,我们发现直接&arr+1后移了40个字节,而不同于其他情况的4字节,这就是因为&arr中的数组名arr是表示整个数组的地址的。      

2.使用指针访问数组

一个式子: *(arr + i) <==>(等价于) arr[i] <==> *[i + arr] <==> i[arr]

能够使用指针访问数组的原因:数组在内存中是连续存放的

                                                   指针的元素可以很方便的遍历数组,取出数组内值

3.一维数组传参的本质

数组传参的本质:传递的是数组首元素的地址,所以形参即使写成数组的形式,本质上也是一个指针变量。

数组传参时:

形参可以写成数组

也可以写成指针

写成数组的形式最简单,在我们初学数组和函数时这样写可以方便我们理解,但是即使写成数组的形式,本质上还是指针。

4.二级指针

我们之前讲过,指针用来存放地址,但指针也是变量,变量就有地址,因此指针也有地址,那指针的地址是什么呢?由此我们引出了二级指针👇

我们先来看看二级指针的形式

由此可知,二级指针变量是用来存放一级指针变量的地址的

5.指针数组

存放指针的数组,每个元素其实是指针类型。

我们可以进行类比:

整型数组表示存放整型的数组

字符数组表示存放字符的数组

......

指针数组就表示存放指针的数组。

6.指针数组模拟二维数组

如图,可以通过指针数组模拟出二维数组的效果,但并非完全是二维数组,因为每一行并非是连续的。

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值