函数指针和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指针-函数名与函数指针 函数名&函数名取地址 函数指针 通常我们可以将指针指向某类型的变量,称为类型指针(如,整型指针).若将一个指针指向函数,则称为函数指针. 函数名的意义 函数名 ...
随机推荐
- Configuration对象和SessionFactory会话池
一.加载核心配置文件方式 二.加载映射文件方式 三.SessionFactory相当于连接池 四.获取session会话 同一个线程中获取的session两种方法获取的是同一个session对象: 不 ...
- WPF listbox中Checkbox横向排列
<ListBox Height="220" Margin="0" ItemsSource="{Binding RightCollection}& ...
- scrum项目冲刺_day06总结
摘要:今日完成任务. 1.服务器部署完成 2.由于将数据库放到了服务器上,搜索功能需要修改 总任务: 一.appUI页面(已完成) 二.首页功能: 1.图像识别功能(已完成) 2.语音识别功能(已完成 ...
- .Net Core with 微服务 - 分布式事务 - 可靠消息最终一致性
前面我们讲了分布式事务的2PC.3PC , TCC 的原理.这些事务其实都在尽力的模拟数据库的事务,我们可以简单的认为他们是一个同步行的事务.特别是 2PC,3PC 他们完全利用数据库的事务能力,在一 ...
- 谷歌浏览器chrome安装插件报"程序包无效: CRX_HEADER_INVALID"错误
今天参加需求评审,看到原来可以谷歌浏览器查看Axure原型文件,真是只有想不到,没有做不到(自己孤陋寡闻了,第一次接触Axure). 需求评审后,我百度"如何使用谷歌浏览器查看Axure原型 ...
- 看完小白也会使用,Android投屏神器scrcpy详细教程
楔子 做为一个软件测试工程师,在使用手机测试的时候,缺陷附件想附上截图.视频,需要从手机把图片.视频发送到拷贝或发送到电脑,非常麻烦. 所以想到使用投屏软件,把手机的屏幕投屏到电脑,便可以直接在电脑上 ...
- session与cookie的联系与区别
一.Session与Cookie介绍 这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你 ...
- 2021牛客暑期多校训练营9C-Cells【LGV引理,范德蒙德行列式】
正题 题目链接:https://ac.nowcoder.com/acm/contest/11260/C 题目大意 一个平面上,\(n\)个起点\((0,a_i)\)分别对应终点\((i,0)\),每次 ...
- T-SQL——关于SQL打开Excel文件
目录 0. 背景说明 1. 安装Access Database Engine 1. SQL脚本 3. .net项目中通过Micsoft.ACE.oledb读取Excel文件 志铭-2021年10月1日 ...
- 【C++ Primer Plus】编程练习答案——第4章
1 void ch4_1() { 2 using namespace std; 3 string fname, lname; 4 char grade; 5 unsigned int age; 6 c ...