解释 qsort 库中使用的函数的 typedef

2023-12-04

我正在使用 qsort 库函数对结构元素数组进行排序,在互联网上搜索时我发现了一个资源:信息:使用 C qsort() 函数对结构进行排序@support.microsoft。

我知道 qsort 函数需要通过通用指针进行类型转换。

但是我无法得到这一行:

typedef int (*compfn) (const void*, const void*);

已声明的内容及其后续调用:

qsort((void *) &array,              // Beginning address of array
      10,                           // Number of elements in array
      sizeof(struct animal),        // Size of each element
      (compfn)compare               // Pointer to compare function
 );
  1. How is typedef行为,我的意思是我们到底输入了什么int (*compfn) or int (compfn)?
  2. 如果是前者,那么电话不应该是(*compfn)?

Syntax:

typedef  int (*compfn)  (const void*, const void*);
  ^      ^       ^            ^          ^
  | return type  |               arguments type
  |             new type name 
  defining new type

compfn是一个新用户定义的type被定义为typedef关键词,

所以,你已经完全定义了类型int (*)(const void*, const void*); to comfn使用我上面描述的语法。

声明:

 compfn  fun; // same as: int (*fun)  (const void*, const void*);

means fun是一个函数指针,它带有两个参数const void*类型和返回值int.

假设你有一个类似的函数:

int xyz  (const void*, const void*);    

那么你可以分配xyz写给fun.

fun = &xyz; 

打电话时qsort():

在表达中(compfn)compare,你正在对一个函数进行类型转换compare to (compfn)类型函数。

A doubt:

电话不应该是(*compfn).

不,它的类型名称不是函数名称。

Note: 如果你只是写int (*compfn) (const void*, const void*);那么没有 typedefcomfn将是一个指向返回的函数的指针int并采用两个类型的参数const void*

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解释 qsort 库中使用的函数的 typedef 的相关文章

随机推荐

  • .NET Core 3.1 始终加密

    使用 NET Core 3 1 和 SQL Always Encrypted 时出现以下错误 3 1支持这个吗 也许我在这里遗漏了一些东西 Keyword not supported column encryption setting 目前
  • 是否可以在 Android 中创建某种全局异常处理程序?

    我的应用程序包括一系列活动 用户必须以线性方式进行这些活动 假设这一系列活动如下所示 A 代表主菜单 B C D E 用户的操作过程如下 A gt B gt C gt D gt E 在这些活动中 用户必须输入数据或允许设备自动获取数据 例如
  • 使用 Symfony Messenger 异步发送电子邮件时如何翻译电子邮件?

    我将 Symfony 邮件程序配置为使用 Messenger 发送电子邮件 https symfony com doc current mailer html sending messages async 我的电子邮件有两种语言 我依靠请求
  • 将字符向量转换为时间?

    我想将以下字符向量转换为时间变量 times lt c 9 9 2015 16 03 13 9 9 2015 17 03 13 9 9 2015 17 56 38 9 9 2015 17 57 29 9 9 2015 19 52 55 9
  • 如何读取 FastCGI 请求的所有输出?

    我正在尝试使用 Rust 向 PHP 文件发出请求FastCGI协议 感谢以下答案 我得到了这段代码我之前的问题 use std os unix net UnixStream use std io Read Write use std st
  • 将 DIV 缩小到换行到其最大宽度的文本?

    将 div 收缩包装到某些文本非常简单 但是 如果文本由于最大宽度 例如 而换行到第二行 或更多行 则 DIV 的大小不会缩小到新换行的文本 它仍然扩展到断点 在本例中为最大宽度值 导致 DIV 右侧有相当多的边距 当想要将此 DIV 居中
  • Swift iOS 9 NSURLErrorDomain 错误 -1004

    我在 iOS 9 和 iOS 8 上使用 Swift 2 和 Alamofire 在 iOS 8 中 我对 API 的所有请求都工作正常 在 iOS 9 中 它们立即失败 并显示 1004 NSURLErrorDomain 并显示消息 无法
  • C#、Html 敏捷性、选择 div 标签内的每个段落

    例如 如何选择 div 标签中的每个段落 div p Hi p p Help Me Please p p Thankyou p 我已经下载了 Html Agility 并在我的程序中引用 我所需要的只是段落 可能有不同数量的段落 并且有大量
  • 将 jsonb 列值转换为 PostgreSQL 中的多列

    假设我在 PostgreSQL 中有一个表 其中包含以下列 CREATE TABLE sample id int jsonb jsonb date date 我插入了这两行 INSERT INTO sample id jsonb date
  • 如何使用 json.net 忽略类中的属性(如果为 null)

    我在用Json NET将类序列化为 JSON 我有这样的课程 class Test1 JsonProperty id public string ID get set JsonProperty label public string Lab
  • 根据另一列中的行更新列行

    我在 R 中有一个数据集 如下所示 我正在尝试更新 描述 列中的空单元格 以获取 值 列中的 0 值 Criteria Value Description Success 0 Success 21 look up Success 20 re
  • Android 检查 LocationManager 的权限

    我试图在单击活动布局中的按钮时显示 GPS 坐标 以下是单击按钮时调用的方法 public void getLocation View view TextView tv TextView findViewById R id gps coor
  • std::enable_if 的基本用法存在问题

    我正在尝试制作一个简单的模板函数 它给出了一些参数 它输出它们之间有一个空格 其中一些可以是枚举的元素 在这种情况下我想输出它的整数值 这是我的代码 include
  • 为生产者消费者问题的变体选择数据结构

    现在 我有一个队列 有多个生产者和单个消费者 消费者线程操作缓慢 此外 消费者通过 peek 操作从队列中取出元素 并且在消费操作完成之前 无法从队列中删除该元素 这是因为生产者线程作为辅助操作还会拍摄当时未完全处理的所有元素的快照 现在
  • 如何禁用 XPage 的客户端验证?

    我知道我可以通过以下方式禁用 xsp properties 中的服务器或应用程序 xsp client validation false 在控制层面通过 disableClientSideValidation true 如果没有为每个控件设
  • 无法联系 pgAdmin 4 服务器:致命错误

    我将 PostgreSQL 从 13 3 升级到 13 4 并收到 pgAdmin 4 的致命错误 我发现其他类似的问题尝试解决删除文件夹的问题 C Users myusername AppData Roaming pgadmin sess
  • 用类实例替换数组中的元素

    这类似于this所以请先阅读它以了解我想要做什么 现在 我想在有类实例时进行替换 例如 import numpy as np class B def init self a b self a a self b b arr np array
  • 从 Sqlite 获取项目并删除重复项目时的无效操作

    我想从sqlite数据库中获取项目 数据库中有大约6 000个项目 有些项目是重复的因此 我想在获取项目时删除这些重复信息 我使用了以下代码 public async static Task
  • Mongo通过正则表达式查找:仅返回匹配的字符串

    我的应用程序有以下堆栈 Ruby 上的 Sinatra gt MongoMapper gt MongoDB 该应用程序在数据库中放置了多个条目 为了交叉链接到其他页面 我添加了某种语法 例如 咖啡是一种由咖啡豆制成的黑色含咖啡因液体 茶 是
  • 解释 qsort 库中使用的函数的 typedef

    我正在使用 qsort 库函数对结构元素数组进行排序 在互联网上搜索时我发现了一个资源 信息 使用 C qsort 函数对结构进行排序 support microsoft 我知道 qsort 函数需要通过通用指针进行类型转换 但是我无法得到