深入理解指针

本文详细解释了字符指针、数组指针、特别是二维数组传参的地址本质,以及函数指针变量和函数指针数组的概念,通过计算器例子展示了如何优化代码。
摘要由CSDN通过智能技术生成

1.字符指针变量

在指针类型中我们知道有一种指针类型为字符指针char*;

还有一种方式使用如下:

代码 const char* pstr = "hello bit."; 特别容易让同学以为是把字符串 hello bit 放到字符指针 pstr ⾥了,但是本质是把字符串 hello bit. ⾸字符的地址放到了pstr中。

2.数组指针变量

2.1数组指针变量是什么?

我们知道指针数组是存放指针的数组,是一个数组,而这与数组指针的本质完全不同,数组指针是一个指向数组的指针。

我们已经熟知:

整形指针变量: int * pint; 存放的是整形变量的地址,能够指向整形数据的指针。
浮点型指针变量: float * pf; 存放浮点型变量的地址,能够指向浮点型数据的指针。
  那数组指针变量应该是:存放的应该是数组的地址,能够指向数组的指针变量。
我们思考一下下面两个表达式:
int* p1[10]
int(*p2)[10]
第一个表达式p1是表示地址与【10】结合起来就是一个数组,所以第一个表达式的含义为一个数组里面存放了10个指针,叫做  指针数组
第二个表达式 p先和*结合,说明p是⼀个指针变量变量,然后指着指向的是⼀个⼤⼩为10个整型的数组。所以 p是⼀个指针,指向⼀个数组,叫  数组指针

2.2数组指针变量的初始化

数组指针变量是⽤来存放数组地址的,那怎么获得数组的地址呢?就是我们之前学习的 & 数组名 。

这样我们数组指针变量的初始化就完成了。

3.二维数组传参的本质

我们一般用二维数组传参打印二位组数的代码是这样写的

这⾥实参是⼆维数组,形参也写成⼆维数组的形式,那还有什么其他的写法吗?

在之前我们了解了数组指针的概念,我们利用数组指针用指针指向数组的每一行。我们再次理解⼀下⼆维数组,⼆维数组起始可以看做是每个元素是⼀维数组的数组,也就是⼆维 数组的每个元素是⼀个⼀维数组。那么⼆维数组的⾸元素就是第⼀⾏,是个⼀维数组。

所以,根据数组名是数组⾸元素的地址这个规则,⼆维数组的数组名表⽰的就是第⼀⾏的地址,是⼀ 维数组的地址。根据上⾯的例⼦,第⼀⾏的⼀维数组的类型就是 int [5] ,所以第⼀⾏的地址的类 型就是数组指针类型 int(*)[5] 。那就意味着⼆维数组传参本质上也是传递了地址,传递的是第⼀
⾏这个⼀维数组的地址。
那么形参也是可以写成指针形式的。如下:

4.函数指针变量

既然存在数组指针变量,我们考虑到函数是有地址的,那么就会有函数指针变量。我们进行函数指针的创建。

我们再试一下整形函数指针类型的创建

5.函数指针数组

上面介绍了函数指针变量,接下来介绍函数指针数组。

函数指针数组就是把函数的指针储存在一个数组当中,可以让有些代码更加简洁。接下来我举个计算器理论的例子。

这是最基本的计算器原理,但是看看代码很长,所以我们可以利用函数指针数组来进行优化!
优化代码如下:
希望大家可以理解函数指针数组并且运用到日常代码中,指针学起来比前几章难一些,希望大家可以坚持到底!!!
  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值