C语言笔记进阶篇第一章:指针进阶

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言笔记进阶篇第一章:指针进阶相关的知识,希望对你有一定的参考价值。

目录

(1)字符指针

(2)指针数组

A:什么是指针数组

B:指针数组的用法

(3)数组指针

A:什么是数组指针

B:数组指针的用法

C:关于指针和数组的再总结

(4)数组参数,指针参数

A:一维数组传参

B:二维数组传参

C:一级指针传参

D:二级指针传参

(5)函数指针

A:什么是函数指针

B:函数指针及其使用

(6)函数指针数组

A:什么是函数指针数组

B:函数指针数组

C:函数指针数组的用途

(7)指向函数指针数组的指针

(8)回调函数

A:引言

B:void指针

C:qsort函数

D:qsort函数(冒泡排序法模拟实现)


(1)字符指针

第一:一个字符

 

第二:一个字符数组

 

第三:常量字符串

 

关于这个常量字符串,一定要注意以下的这个问题

 

 

所以这个常量字符串感觉像是省略版的“const char* p1”

(2)指针数组

A:什么是指针数组

所谓指针数组,就是存放指针的数组,它的里面存放的全部是指针

 

B:指针数组的用法

指针数组的用处它能保存指针,这种用法尤其体现于数组中,因为数组名就是地址

 

(3)数组指针

A:什么是数组指针

数组指针,其主语就是指针。那么整形指针指向整形数据,字符指针指向字符数据,相应的数组指针也就是指向数组。前面我们说过,数组的数组名表示数组的首元素地址,而如果对数组进行“&arr”这样的操作,这表示数组的地址,那么数组的地址当然也是需要一个指针来保存的,所以我们把保存数组的地址指针叫做数组指针

 

关于这点,由于数组指针的加入,很多初学者在书写指针时感到很混乱

 

 

B:数组指针的用法

第一:数组指针不会使用的方法

数组指针被解引用后,就是数组名

 

可以看出这种写法是在让人别扭,与其这种写法,还不如使用数组名

 

第二:数组指针的真正用法

如下:有一个二维数组,调用函数输出它。

首先我们最常用的输出方式就是如下

 

而采用数组指针输出方式如下

 

C:关于指针和数组的再总结

以下写法均是等价

 

 

 

(4)数组参数,指针参数

A:一维数组传参

 

B:二维数组传参

 

C:一级指针传参

 

 

D:二级指针传参

 

 

(5)函数指针

A:什么是函数指针

数组指针是指向数组的,函数指针就是指向函数的,也就是函数也是有自己的地址的

这里要注意一点,数组的时候&数组名是数组的地址,数组名是数组首元素的地址。

而函数名和&函数名都是函数的地址

B:函数指针及其使用

函数指针的定义和数组指针基本类似

 

 

(6)函数指针数组

A:什么是函数指针数组

函数指针数组,本质是指针数组,也就是它是存放函数指针的一个数组。

B:函数指针数组

如下,有2个函数,分别表示加减乘除,他们的函数返回类型和参数类型是一致的,所以可以用一个数组保存他们的地址

 

 

C:函数指针数组的用途

函数指针数组能够很好的保存一组具有相同参数类型,相同返回值的函数的地址。它的一个经典例子就是“转移表”。比如在计算器例子中,使用switch case语句,如果使用普通方式,要增加一些其他运算时,其case语句要多次增加,显得很臃肿,而运用函数指针数组,则能避免这种情况,且在后期增加新的相同类型的运算时,在主函数内只需增加新函数地址

 

(7)指向函数指针数组的指针

我们说过,函数指针数组它是一个数组,数组中每个元素是函数指针。通过前面的学习我们知道指向数组的指针叫做数组指针,以此类推,既然函数指针数组是一个数组,那么指向它的指着就叫做指向函数指针数组的指针

 

(8)回调函数

A:引言

回调函数就是把一个函数的地址进行传参,最后通过地址来调用函数,一下是一个经典例子

 

前面的时候,咋们讲过冒泡排序,可以使一组整形数据排序

 

但是这个函数不够通用,因为在面对浮点型,结构体这种特殊数据时,就不能排序了

B:void指针

前面说过对于int数据,应该定义int*的指针,依次类推,但是不知道这个指针的类型具体是什么的时候,可以将其定义为void类型,也就是空类型

 

所以void指针的特点就在于此,后续讲解中也是运用到了void指针的这样一个特点。但是特别需要注意的一点是,指针类型的意义在于在进行指针移动时其具体需要移动几个字节的问题,而对于void指针不知道定义的是什么类型,所以不能进行解引用操作。

C:qsort函数

qsort函数就是快速排序,可以帮助我们解决上述的问题,比如下方int数组比较

 

此时,他就可以完成float数组的排序

 

当然他也可以完成结构体的比较

 

D:qsort函数(冒泡排序法模拟实现)

上一节我们讲了,qsort函数,qsort函数第四个参数需要我们自己传入一个比较函数,这个比较函数的返回值是一个大于0,或者小于0或等于0的数,qsor函数通过这样的一个参数完成具体的排序,交换的过程,其具体的方式是快速排序。但是这里通过冒泡排序,来推究到底这个qsort函数内部是如何实现的

 

指针更深入层次的了解请移步

【C语言重点难点精讲】C语言指针_快乐江湖的博客-CSDN博客123https://zhangxing-tech.blog.csdn.net/article/details/120842292

以上是关于C语言笔记进阶篇第一章:指针进阶的主要内容,如果未能解决你的问题,请参考以下文章

C语言笔记初级篇第一章:C语言快速入门及注意事项

C语言笔记初级篇第一章:C语言快速入门及注意事项

《C语言深度剖析》第一章 关键字详解 p4 C语言从入门到入土(进阶篇)

Java编程基础篇第一章

《深度学习进阶:自然语言处理》第一章学习(第一部分)

IOS开发之网络篇第一章:数据交换格式