【C语言】C语言实现泛型编程
泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。
这里提供一种方法,通过空指针类型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语言实现泛型编程相关推荐
- 为什么我们需要一门新语言——Go语言
编程语言已经非常多,偏性能敏感的编译型语言有 C.C++.Java.C#.Delphi和Objective-C等,偏快速业务开发的动态解析型语言有 PHP.Python.Perl.Ruby.JavaS ...
- 职工信息管理程序设计c语言,C语言程序设计职工信息管理系统.docx
C语言程序设计职工信息管理系统.docx 1 数信学院数信学院 课程设计报告课程设计报告 课程名称课程名称C C 语言程序设计语言程序设计_ _ 题目名称题目名称职工信息管理系统职工信息管理系统 学生 ...
- c语言 python-C语言、Java语言和python语言的区别在哪里
原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...
- 程序设计语言python语言概述
程序设计语言 什么是程序设计语言 程序设计语言是人类与计算机交流和沟通的语言.人们通过使用程序语言,来书写计算机程序,以达到设计的程序满足需求的目的. 程序语言的发展历史 程序语言经历了从低级语言到高 ...
- c语言吗 程序语言,编程语言为什么从c语言开始,那有没有a语言b语言呢?
实际上没有A语言叫法. B语言 B语言是贝尔实验室的计算机先驱Ken Thompson 和 Dennis Ritchied与1969年设计开发.他们的主要其他功绩还有Unix操作系统和C语言.可以说C ...
- 脚本语言语言脚本语言:Shell , JavaScript、VBScript、Perl、PHP、Python、Ruby、Lua
今天一直在研究脚本语言语言之类的问题,上午正好有机会和大家共享一下. 脚本语言:Shell , JavaScript.VBScript.Perl.PHP.Python.Ruby.Lua 工作控制语言和 ...
- 怎么理解python语言_Python语言入门1-理解Python语言
本文主要向大家介绍了Python语言入门的理解Python语言,通过具体的内容向大家展现,希望对大家学习Python语言入门有所帮助. python是解释型的脚本语言 解释型语言 与C/C++等编译型 ...
- 国家语言,语言代码,locale id对应表
国家语言,语言代码,locale id对应表.比如 en_US对应的id为1033, 中文的locale=zh_CN,id=2052. Locale Language code LCID string ...
- 回旋矩形C语言,C语言回旋函数解释下,该如何处理
当前位置:我的异常网» C语言 » C语言回旋函数解释下,该如何处理 C语言回旋函数解释下,该如何处理 www.myexceptions.net 网友分享于:2013-06-08 浏览:30次 C ...
- Android 应用开发(8)---语言和语言区域
语言和语言区域 从 Android 7.0(API 级别 24)开始,Android 为多语言用户提供增强的支持,让他们可以在设置中选择多个语言区域.Android 通过大幅扩展受支持的语言区域数量并 ...
最新文章
- 如何正确的学习Blender-入门到精通课程
- linux su切换用户提示 Authentication failure的解决方法
- 加密算法、DES、IDEA、RSA、DSA
- Linux 磁盘分区、格式化、目录挂载
- sql 包含_SQL笔记:在一张包含学生ID、课程、成绩的表中,检索各科前三名
- Unable to install breakpoint in Modify compiler options to generate line number attributes
- 7-158 验证“哥德巴赫猜想” (20 分)
- 获取手机idfa_东风无力百花残 | IDFA留给开发者的时间不多了
- Ample Sound Ample Guitar Metal Hellrazer Mac - 虚拟九弦金属吉他
- WebStorm中配置node.js(Windows)
- Android进阶(三) 数据存储之SharedPreference
- 软件设计师:12-下午题历年真题
- 2017百度之星资格赛题解(1003、1004)
- 【爬虫专栏17】多线程爬双色球
- 图像处理之底片效果、黑白效果、浮雕效果
- 电脑异常蓝屏问题排查记录
- php简体转繁体类库源代码
- python代码 学生上课签到表_一种上课签到系统的制作方法
- 应聘/求职----上海IT公司红黑榜TOP100
- SQL 日期和时间处理函数
热门文章
- iOS 中高级面试题(附答案)
- 开学蓝牙耳机选哪个?音质好的蓝牙耳机排行
- 充电宝国产品牌推荐,国产充电宝排名
- Activiti 工作流引擎 详解
- 5款好用的时间管理软件推荐[2020年推荐]
- 绿联 蓝牙适配器 linux,绿联USB蓝牙适配器,蓝牙4.0带aptX音频接收器
- java mina框架实例_MINA框架简介和一个简单的例子
- 斐讯k2php环境,斐讯K2 刷华硕固件 实现 单线复用(网络、IPTV走一根网线)
- inSSIDer无线信号扫描工具
- html5 文本转语音,JS实现文字转语音播放之SpeechSynthesisUtterance