函数指针和qsort函数
1、函数指针的形式:
函数指针:int (*funcP) (int *a, int *b)
表示定义了一个funcP函数指针,指向了返回值为int类型,参数为int* 和int* 的函数
使用方式:
//代码实现了两数的交换
#include <stdlib.h>
#include <stdio.h>
int swap(int* num1, int* num2) {
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
int main()
{
int (*funcP) (int* a, int* b);
int num1 = 10;
int num2 = 20;
funcP = swap;
funcP(&num1, &num2);
printf("num1 = %d, num2 = %d\n", num1, num2);
return 0;
}
上述代码运行结果为:num1 = 20, num1 = 10,实现了两个值的交换功能。
同理我们可以定义出一个返回值为int类型,形参为char* 的函数指针:
int(*funcP) (char* str)
使用方式:
运行结果为:4
2、函数指针的应用之qsort函数:
qsort函数:
qsort(void* base, size_t ntimes, size_t size, int (*compar) (const void*, const void*)
base 是要比较内容的地址;
ntimes 是比较内容的个数,如整形数组a:ntimes = sizeof (a) / sizeof ( a[0])
size 是要比较内容的单个类型的大小,如int:sizeof(int)
compare 就是一个函数指针,具体使用方式如下:
//qsort函数的应用
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//数组排序
int myCompareInt(const void *a, const void *b) {
unsigned int *p1, *p2;
p1 = (unsigned int*)a;//不能是a,因为类型不匹配
p2 = (unsigned int*)b;
// 返回a - b 从小到大,返回b - a 从大到小排序
return (*p2 - *p1);
}
//单字符按照ASSIC码排序
int myCompareChar(const void * a, const void * b) {
//从小到大排序按照assic
return (strcmp((char*)a, (char*)b));
//从大到小排序按照assic
return(strcmp((char*)b, (char*)a));
}
//知识点:char类型指向的本身就是地址,不能再解引用了,int需要解引用
#define NUM 5
int main()
{
unsigned int an[NUM] = {5,7,8,9,3};
qsort(an, sizeof(an) / sizeof(an[0]), sizeof(an[0]),myCompareInt);
for (int i = 0; i < NUM; i++) {
printf("%d ",an[i]);
}
printf("\n");
char* str1 = "aefdcb";
char str2[] = "aefdcb";
qsort(str2, strlen(str2), sizeof(char), myCompareChar);
printf("%s\n",str2);
int (*funcP) (int* a, int* b);
return 0;
}

文提到了一个段错误的问题,这里特别强调一下段错误
段错误就是指访问的内存超出了系统给这个程序所设定的内存空间,例如,访问了不存在的内存地址,访问了系统保护的内存地址,访问了只读的内存地址等情况,小章节详细记录段错误
函数指针和qsort函数的更多相关文章
- qsort中的函数指针,及函数解释
函数指针有何用 函数指针的应用场景比较多,以库函数qsort排序函数为例,它的原型如下: void qsort(void *base,size_t nmemb,size_t size , int(*c ...
- [Reprint]C++普通函数指针与成员函数指针实例解析
这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下 C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般 ...
- C 函数指针与回调函数
函数指针是指向函数的指针变量. 通常我们说的指针变量是指向一个整型.字符型或数组等变量,而函数指针是指向函数. 函数指针可以像一般函数一样,用于调用函数.传递参数. 函数指针变量的声明: #inclu ...
- C++ 类的多态三(多态的原理--虚函数指针--子类虚函数指针初始化)
//多态的原理--虚函数指针--子类虚函数指针初始化 #include<iostream> using namespace std; /* 多态的实现原理(有自己猜想部分) 基础知识: 类 ...
- 深入浅出剖析C语言函数指针与回调函数(一)【转】
本文转载自:http://blog.csdn.net/morixinguan/article/details/65494239 关于静态库和动态库的使用和制作方法. http://blog.csdn. ...
- C语言之函数指针、回调函数的使用
一.背景 首先看下如下代码,这个定义是放在头文件的,在程序中tCdrvCallbackFkt也定义了另一个变量,而且括号后面还跟定义了几个变量,不理解这个定义. typedef void (PUBLI ...
- VC++的函数指针和回调函数 及友元函数
什么是函数指针 函数指针是指向函数的指针变量.也就是说,它是一个指针变量,而且该指针指向一个函数. 对于指针变量来说,它的值是它指向的变量的地址.举个例子:指针变量pi是指向一个整型变量i的指针,则变 ...
- C 函数指针、回调函数
参考链接:https://www.runoob.com/cprogramming/c-fun-pointer-callback.html 函数指针 函数指针就是执行函数的指针,他可以像正常函数一样去调 ...
- C语言函数指针和回调函数
彻底搞定C指针-函数名与函数指针 函数名&函数名取地址 函数指针 通常我们可以将指针指向某类型的变量,称为类型指针(如,整型指针).若将一个指针指向函数,则称为函数指针. 函数名的意义 函数名 ...
随机推荐
- [第十一篇]——Docker 仓库管理之Spring Cloud直播商城 b2b2c电子商务技术总结
Docker 仓库管理 仓库(Repository)是集中存放镜像的地方.以下介绍一下 Docker Hub.当然不止 docker hub,只是远程的服务商不一样,操作都是一样的. Docker H ...
- 关于FeignClient上的RequestMapping不能生效的问题
问题 我有两个FeignClient共同继承了一个接口,两个Client有各自不同的url实现,其中一个需要加上类似于@RequestMapping作用在类上的效果,因为@RequestMapping ...
- yield实现 coroutine协程案例
yield可以手工实现协程,但python为我们封装了一个greenlet,先看看yield实现,yield需要手工操作,无法实现IO操作时自动切换协程,greenlet是封装好的,能方便使用io切换 ...
- Ubuntu管理员手册
hostname cat /etc/hosts apt-get install iproute2 iproute2-doc ip a ps -aux
- 【转载】linux 工作队列上睡眠的认识--不要在默认共享队列上睡眠
最近项目组做xen底层,我已经被完爆无数遍了,关键在于对内核.驱动这块不熟悉,导致分析xen代码非常吃力.于是准备细细的将 几本 linux 书籍慢慢啃啃. 正好看到LINUX内核设计与实现,对于内核 ...
- 做一个U盘的学习路线
最近想研究一个U盘,然后顺便熟悉一下USB协议.因为USB协议比较复杂, 常用的复杂外设除了WiFi,Ethernet,SDIO和USB这些就是USB了,学习USB的时候肯定要拿一个东西下手,所以简单 ...
- 【PHP数据结构】图的概念和存储结构
随着学习的深入,我们的知识也在不断的扩展丰富.树结构有没有让大家蒙圈呢?相信我,学完图以后你就会觉得二叉树简直是简单得没法说了.其实我们说所的树,也是图的一种特殊形式. 图的概念 还记得我们学习树的第 ...
- 教你用ps如何将图片、文字做出模糊斑驳的作旧效果
1.对图片的图层执行滤镜-风格化-扩散,选变亮优先. 2.选择画笔工具,在画笔选项里选择喷溅59像素,画笔大小我用的是100px,大家可以根据自己的情况自定义大小,前景设置为黑色. 3.在图章图层上方 ...
- Java基础系列(20)- while循环
循环结构 while循环 do-循环 for循环 在java5中引入了一种主要用于数组的增强型for循环 while循环 while是最基本的循环,它的结构为 while(布尔表达式){ //循环内容 ...
- selenium下拉选择框处理
HTML: (一)通过xpath层级标签定位 driver.find_element_by_xpath(".//*[@id='Resolution']/option[2]").cl ...