函数指针和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指针-函数名与函数指针 函数名&函数名取地址 函数指针 通常我们可以将指针指向某类型的变量,称为类型指针(如,整型指针).若将一个指针指向函数,则称为函数指针. 函数名的意义 函数名 ...
随机推荐
- VUE005. 在data中使用 / 改变data,或在data中调用method函数
使用三方UI库时经常会遇到在data中写入方法的场景,如Element-UI的级联选择器(动态加载part)需要在data中写入lazyLoad. 但后端总会给出意想不到的需求: 通过接口调取一串数据 ...
- 小白也能看懂的dubbo3应用级服务发现详解
搜索关注微信公众号"捉虫大师",后端技术分享,架构设计.性能优化.源码阅读.问题排查.踩坑实践. 本文已收录 https://github.com/lkxiaolou/lkxiao ...
- 添加class和删除class以及判断是否含有class
addClass(document.body, 'showRightPanel') removeClass(document.body, 'showRightPanel') /** * Add ...
- linux下分卷压缩,合并解压的3种方法
我们上传东西的时候,由于文件过大而不能上传,或者不给上传,最明显的就是发邮件了,附件最大5M,有的10M.如果超过了就郁闷了.这个时候,如果能把压缩的东西,分割开来就比较爽了,windows下面我想大 ...
- POJ2352 Stars (静态二叉检索树)
https://vjudge.net/problem/POJ-2352 分析: 由于是按照y坐标的升序,y坐标向等的按x的升序的顺序给出星星.那么某个星星的等级数就是在他前面x坐标小于等于他的x坐标的 ...
- Shell系列(30)- 单分支if语句判断分区使用率
需求 监控分区已用空间,超过80%,抛出警告 脚本 #!/bin/bash #给tets赋值用于接收参数,传递给if进行判断 #申明变量test并赋值,由于赋的值是系统变量的结果,所以得用$()引用 ...
- Mysql Navicate 基础操作与SQL语句 版本5.7.29
SQL数据的增删改查:此部分所有SQL语句在navicat中与mysql命令行执行效果一样,只是mysql服务端在命令行执行,而navicat只是在客户端的图形化打开操作. 一.进入数据库 .连接数据 ...
- php stream 流封装协议
http://php.net/manual/wrappers.php 过程: 1. 开始通信 2. 读取数据 3. 写入数据 4. 结束通信 usage: * 读写文件系统 <?php $han ...
- session入库
#存储session的数据表示列结构,可作为参考#创建数据库(可选)CREATE DATABASE session;#使用创建的数据库(可选)USE session;#创建存储session的数据表( ...
- docker network 参数
一. 格式 docker network COMMAND 二.COMMAND 讲解 2.1 .docker network connect 格式 docker network connect [OPT ...