泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。
这里提供一种方法,通过空指针类型void*

现交换两个元素内容的函数 swap

#include <stdio.h>/** \brief   交换arg1与arg2的值使用空指针类型来实现泛型,** \param   arg1 -- 空指针类型,指向需要交换的数据类型* \param   arg2 -- 空指针类型,指向需要交换的数据类型* \param   type -- 需要交换的2个数据类型的字节大小,用sizeof求数据类型的字节大小* \return    无**/
void swap(void *arg1, void *arg2, unsigned type)
{char temp = 0;char *p1 = (char*)arg1;char *p2 = (char*)arg2;while(type--){temp = *p1;*p1 = *p2;*p2 = temp;p1++;p2++;}
}int main()
{int arg1 = 0x11223344;int arg2 = 0x55667788;printf("arg1 = %X   arg2 = %X\n", arg1, arg2);swap(&arg1, &arg2, sizeof(arg1));printf("arg1 = %X   arg2 = %X\n", arg1, arg2);
}/*
输出结果
arg1 = 11223344   arg2 = 55667788
arg1 = 55667788   arg2 = 11223344
*/

在数组中查询元素,找到则返回它的索引,没找到返回-1

#include <stdio.h>/** \brief  比较内存地址mem1与mem2上的数据** \param   mem1 -- 空指针类型,内存地址1* \param   mem2 -- 内存地址2* \param   type -- 数据类型占用的字节大小* \return  地址上的数据一样则返回0,不一样则返回-1**/
int lmemcmp(void *mem1, void *mem2, unsigned type)
{char *p1 = 0;char *p2 = 0;p1 = (char*)mem1;p2 = (char*)mem2;while(type--){if(*p1 != *p2){return -1;}p1++;p2++;}return 0;
}/** \brief  此函数在数组 buff 中查找 key元素,找到后返回它的索引,找不到返回 -1。** \param   key -- 空指针类型,指向需要查找的元素* \param   buff -- 空指针类型,指向数组buff* \param   type -- 数组buff的元素类型占用的字节大小* \param   count -- 数组buff的元素个数* \return  找到后返回它的索引,找不到返回 -1。**/
int lsearch(void *key, void *buff, unsigned type, unsigned count)
{void *p = NULL;for(unsigned i = 0; i < count; i++){p = buff + i * type;if(lmemcmp(key, p, type) == 0)return i;}return -1;
}int main()
{int buff[] = {1,2,3,4,5,6,7,8};int i = 8;printf("%d\n", lsearch(&i, buff, sizeof(*buff), sizeof(buff) / sizeof(*buff)));
}

C 语言也可以实现一定的泛型编程,但这样是不安全的,系统对其只有有限的检查。在编程时一定要多加细心。

【C语言】C语言实现泛型编程相关推荐

  1. 为什么我们需要一门新语言——Go语言

    编程语言已经非常多,偏性能敏感的编译型语言有 C.C++.Java.C#.Delphi和Objective-C等,偏快速业务开发的动态解析型语言有 PHP.Python.Perl.Ruby.JavaS ...

  2. 职工信息管理程序设计c语言,C语言程序设计职工信息管理系统.docx

    C语言程序设计职工信息管理系统.docx 1 数信学院数信学院 课程设计报告课程设计报告 课程名称课程名称C C 语言程序设计语言程序设计_ _ 题目名称题目名称职工信息管理系统职工信息管理系统 学生 ...

  3. c语言 python-C语言、Java语言和python语言的区别在哪里

    原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...

  4. 程序设计语言python语言概述

    程序设计语言 什么是程序设计语言 程序设计语言是人类与计算机交流和沟通的语言.人们通过使用程序语言,来书写计算机程序,以达到设计的程序满足需求的目的. 程序语言的发展历史 程序语言经历了从低级语言到高 ...

  5. c语言吗 程序语言,编程语言为什么从c语言开始,那有没有a语言b语言呢?

    实际上没有A语言叫法. B语言 B语言是贝尔实验室的计算机先驱Ken Thompson 和 Dennis Ritchied与1969年设计开发.他们的主要其他功绩还有Unix操作系统和C语言.可以说C ...

  6. 脚本语言语言脚本语言:Shell , JavaScript、VBScript、Perl、PHP、Python、Ruby、Lua

    今天一直在研究脚本语言语言之类的问题,上午正好有机会和大家共享一下. 脚本语言:Shell , JavaScript.VBScript.Perl.PHP.Python.Ruby.Lua 工作控制语言和 ...

  7. 怎么理解python语言_Python语言入门1-理解Python语言

    本文主要向大家介绍了Python语言入门的理解Python语言,通过具体的内容向大家展现,希望对大家学习Python语言入门有所帮助. python是解释型的脚本语言 解释型语言 与C/C++等编译型 ...

  8. 国家语言,语言代码,locale id对应表

    国家语言,语言代码,locale id对应表.比如 en_US对应的id为1033, 中文的locale=zh_CN,id=2052. Locale Language code LCID string ...

  9. 回旋矩形C语言,C语言回旋函数解释下,该如何处理

    当前位置:我的异常网» C语言 » C语言回旋函数解释下,该如何处理 C语言回旋函数解释下,该如何处理 www.myexceptions.net  网友分享于:2013-06-08  浏览:30次 C ...

  10. Android 应用开发(8)---语言和语言区域

    语言和语言区域 从 Android 7.0(API 级别 24)开始,Android 为多语言用户提供增强的支持,让他们可以在设置中选择多个语言区域.Android 通过大幅扩展受支持的语言区域数量并 ...

最新文章

  1. 如何正确的学习Blender-入门到精通课程
  2. linux su切换用户提示 Authentication failure的解决方法
  3. 加密算法、DES、IDEA、RSA、DSA
  4. Linux 磁盘分区、格式化、目录挂载
  5. sql 包含_SQL笔记:在一张包含学生ID、课程、成绩的表中,检索各科前三名
  6. Unable to install breakpoint in Modify compiler options to generate line number attributes
  7. 7-158 验证“哥德巴赫猜想” (20 分)
  8. 获取手机idfa_东风无力百花残 | IDFA留给开发者的时间不多了
  9. Ample Sound Ample Guitar Metal Hellrazer Mac - 虚拟九弦金属吉他
  10. WebStorm中配置node.js(Windows)
  11. Android进阶(三) 数据存储之SharedPreference
  12. 软件设计师:12-下午题历年真题
  13. 2017百度之星资格赛题解(1003、1004)
  14. 【爬虫专栏17】多线程爬双色球
  15. 图像处理之底片效果、黑白效果、浮雕效果
  16. 电脑异常蓝屏问题排查记录
  17. php简体转繁体类库源代码
  18. python代码 学生上课签到表_一种上课签到系统的制作方法
  19. 应聘/求职----上海IT公司红黑榜TOP100
  20. SQL 日期和时间处理函数

热门文章

  1. iOS 中高级面试题(附答案)
  2. 开学蓝牙耳机选哪个?音质好的蓝牙耳机排行
  3. 充电宝国产品牌推荐,国产充电宝排名
  4. Activiti 工作流引擎 详解
  5. 5款好用的时间管理软件推荐[2020年推荐]
  6. 绿联 蓝牙适配器 linux,绿联USB蓝牙适配器,蓝牙4.0带aptX音频接收器
  7. java mina框架实例_MINA框架简介和一个简单的例子
  8. 斐讯k2php环境,斐讯K2 刷华硕固件 实现 单线复用(网络、IPTV走一根网线)
  9. inSSIDer无线信号扫描工具
  10. html5 文本转语音,JS实现文字转语音播放之SpeechSynthesisUtterance