指针进阶(1)

目录

指针数组

数组指针

数组指针与数组首元素指针的区别

数组指针的使用(使用频率并不高)

数组参数和指针参数(总结)

一维数组

二维数组

一级指针

二级指针


指针数组

数组内存放的是指针,而数组的类型也需要明确数组内元素为指针,例:

而其他类型的指针数组也类似:char*,short*...

我们也知道,数组名是首元素地址那么我们能否在指针数组内存放数组呢:

这样也是可以的,那么我们能否模拟出一个二维数组?

答案是肯定的,但是为什么在打印的时候要写出arr[ i ] [ j ]呢?

因为arr[ i ][ j ]和*(arr[ i ] + j)是等价的,arr[ i ]与*(arr + i)也是等价的

数组指针

类比:

整型指针:指向整型的指针

int a=0;

int* pa=&a;

字符指针:指向字符的指针

char b=0;

char* pb=&b;

数组指针:指向数组的指针

int arr[10];

int (*parr)[10]=&arr;

数组指针与数组首元素指针的区别

数组指针也就是数组的指针,存放的是数组的地址,我们知道数组名会隐式类型转换成数组首元素地址(在sizeof和&后不会转换),那这个数组的地址和数组首元素地址有什么不同?

由图可知,在地址值上首元素地址和数组的地址是完全一样的

当我们给他们各加1的时候,数组首元素地址加了4,而数组地址则加了16进制的28,也就是40,arr数组的地址和首元素地址为什么加1后不一样?原因在于他们的类型不同,数组的首元素地址的类型是 int* 而数组的地址则是 int (*)[10],数组首元素地址+1跳过的是一个元素,数组的地址+1跳过的是整个数组

数组首元素地址可以精确访问到每一个元素,使用数组却不行,那么数组指针有什么用处呢?

数组指针的使用(使用频率并不高)

在使用一维数组时传参,形参可以写成地址的形式也可以写成数组的形式,那么二维数组是如何传参的

在此之前先简单了解一下二维数组

int arr[2][3] = { 1,2,3,4,5,6 };

2表示行,3表示列

行可省略,列不可省略

数组名也表示首元素地址

数组首元素地址就是第一行的地址,是一个一维数组的地址

二维数组可以看成一个一维数组的数组

使用数组指针:

由图可知,函数在接受二维数组的参数是接受的是一个一维数组的地址

数组参数和指针参数(总结)

就俩字:上图

一维数组

一维数组传参,形参可以是指针也可以是数组,当形参是指针时需要注意类型

二维数组

二维数组传参,形参可以是数组也可以是指针

如果是数组,行可以省略,列不可省略

如果是指针,传过去的是第一行的指针,所以应该是指针数组

一级指针

当形参是一级指针时,我们可以给它传什么参数?

二级指针

最后,祝各位道友早日突破/进阶

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值