复习指针(16)

<1>函数指针数组

a.

  • 把函数的地址存放到一个数组中,那这个数组就叫函数指针数组

是int ( * ) ( )类型的函数指针

  • parr1先和[]结合,说明parr1是数组, 碰到右 ) 括号反转, * 告诉我们它的元素是指针类型, 又碰到 ( 左括号反转 , ()告诉我们是函数, 最后int告诉我们它的返回类型是整数
  • 注意:c语言的声明解读遵循左右法则 (从变量名开始,先左后右,遇到括号反转)

b.

  • 非常简易版的四则运算计算机

上面是基础功能

这个本质是数组,在有parr[ i ]这种结构中,c语言规则会让其等价于 *( parr + i )

然后找到相应的运算地址,再将( )括号里的9 与 3带入

<2>转移表

a.

  • 我们用switch来实现选择功能

很明显这段代码非常的冗余,重复内容太多,效率低下,然后我们观察重复内容和不一样的地方,是否可以包成一个函数!

b.

  • 于是乎 用到函数指针数组

<3>回调函数

  • 回调函数就是一个通过 函数指针 调用 的函数 ---- 就是在一个函数里通过函数指针去调用另一个函数
  • 如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数

<4>qsort使用举例

  • 是C语言中提供的一个排序函数,是一种基于快排排序算法思想的一种排序算法
  • 它的头文件是 stdibl.h
  • 1.现成的排序算法,学会了直接可以使用

2.大部分情况下,效率都比冒泡排序高

3.qsort函数可以排序任何类型的数据

  • 使用规则

注意:compar这个函数(名字可以修改)是要自己写的,就是告诉qsort怎么比较 传递的值

定义时,严格 int (name) ( const void* p1, const void* p2) { 怎么比较 ,内容}

  • 这个的意思就是,返回的值只分3种情况

<0 ----- p1 < p2 ,将p1放置p2后,

=0 ----- p1 = p2,就是位置不变

>0 ----- p1 > p2,将p1放置p2前

https://legacy.cplusplus.com/reference/cstdlib/qsort/?kw=qsort

c语言关于qsort详细内容

1.使用qsort函数排序整型数据

  • 这里有这个要注意的点: void* p1 像这种参数使用时,要强制转换一下类型,比如

2.使用qsort排序数据结构

  • 补充一个小知识 . 与 -> 的使用

区别图上文字有

注意strcmp的使用:

1.它的头文件是string.h

2.strcmp只能比较字符串,而且比较的本质是逐位ASCII值的大小

怎么比较的呢? 从第一个字符开始比,谁的ASCII值大,谁的字

符串就更大,一旦不一样立刻分出结果,后面不看

3.对于返回值 0代表相等, 正数代表前字符串大, 负数代表后字符串大

3.模拟qsort使用

  • 这个是主要的,核心代码(泛型编程)
  • 对于打印函数,和比较函数略微有所不同(稍后再提)

这个有所不同 有点像 插件 的感觉 哈哈

  • 先说比较厉害的地方(根本想不到):

1.既然模拟是qsort库函数,那么void budlle_sort2的4个参数类型就可以理解了

2.较难的是,不同类型的数据怎么处理,有4个字节 or 8个字节等,于是我们可以缩小单位,以一个字节方式处理

(char*)base 就把 首元素地址第一个字节取了下来( 把首元素的地址拆成多份 取第1份 )

width是一个元素的大小

(char*)base + j * width 代表第j个元素

3.看到交换函数,有意思的

它的意思是将地址的多份 分批一次一次的交换,直到多份全部交换完后,两个元素才真正的互相交换完毕

我当时突然想为什么有 * 解引用 ? 其实呢,地址就像门牌号,解引用地址就是房里的东西

a. 传参时整数类型

就这两个函数不一样

b.传的参数是结构体

这里的代码与结构体那里一样,函数嘛,重复使用,像一个插件样

你好读者,当你看到这里,说明我写内容,你感兴趣,如果你有什么意见 or 发现了错误 可以告诉我

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务