热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【C语言】C语言实现泛型编程

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

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

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

#include /** \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 /** \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 &#61; NULL;for(unsigned i &#61; 0; i < count; i&#43;&#43;){p &#61; buff &#43; i * type;if(lmemcmp(key, p, type) &#61;&#61; 0)return i;}return -1;
}int main()
{int buff[] &#61; {1,2,3,4,5,6,7,8};int i &#61; 8;printf("%d\n", lsearch(&i, buff, sizeof(*buff), sizeof(buff) / sizeof(*buff)));
}

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


推荐阅读
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
author-avatar
呢嘚吖頭ing_311
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有