题外话
今天听了《编程范式》的Lecture 5,继续上一篇的主题,用C语言实现简单的泛型编程,收个尾。
正题
回忆上一篇的最后一个函数:
再定义一个要调用的函数:
看如下调用:
若是一个C风格字符串,比如如下:
注意names数组是保存指向字符串首地址指针的数组。其中的字符串保存在文字常量区。
C语言中的内存区域划分:
栈区(Stack):由编译器自动分配、释放,存放函数参数值、局部变量的值等;
堆区(Heap):一般由程序员分配、释放,若不释放,有可能被OS回收;
全局区(静态区)(Static):全局变量和静态变量在这里存储。初始化的在一块,未初始化的在相邻的另一块。程序结束后由系统释放。
文字常量区:常量、字符串在这里储存。由系统释放。
程序代码区:存放函数体的二进制代码。
注意由于names数组存的是指向各字符串的地址,所以found为二级指针,以得到字符串。注意lsearch参数表中的favorName前的&,不能丢掉。
StrCmp()函数的定义:
注意第二第三行。C语言是强类型的语言。如果没有*(char**),系统将不清楚vp1、vp2是指向什么类型的指针,编译系统将报错:void value not ignored as it ought to be.而lsearch函数中将传入的是指向指向字符串首地址的指针的指针,即二级指针,即char**类型,将其解引用,得到指向目标字符串首地址的指针,赋给s1指针,s2同理。然后返回调用系统函数strcmp()比较两个字符串s1、s2的结果。
分享到:
相关推荐
这个是我写的一个c语言实现的泛型和迭代器,只是简单的实现了一个链表,用long和double作为链表的元素类型. 没有实现内存释放,累了不想写了. 欢迎指正.
在C语言中,可以通过一些手段实现这样的泛型编程。这里介绍一种方法——通过无类型指针void* 看下面的一个实现交换两个元素内容的函数swap,以整型int为例: void swap(int* i1,int* i2){ int temp; temp = *i1; ...
在C++中,实现泛型编程的核心机制是模板。 #### 泛型编程的历史背景 早期的面向对象语言,如Java,通过使用单一基类(如`Object`)的方法来实现泛型容器,这种方式在C++中并不适用,原因在于: 1. **单根继承的...
【泛型编程的挑战】C语言中使用泛型指针技术实现泛型编程时,需要注意类型安全问题。由于void*指针在使用前需要显式类型转换,否则会导致编译错误或运行时错误。此外,泛型编程可能导致代码可读性和可维护性的降低,...
标题中的“cpp-微小的C库利用未定义的行为来实现泛型编程”指的是一个C语言编写的库,它尝试通过利用C语言中未定义的行为(Undefined Behavior, UB)来模拟实现类似C++中的泛型编程特性。在C++中,泛型编程允许...
虽然C语言的实现不如C++ STL那样简洁和强大,但它可以帮助初学者理解数据结构和算法的基础,以及如何在没有模板支持的情况下实现泛型编程。 在提供的`List`压缩包文件中,可能包含了实现这些功能的源代码。对于初学...
根据提供的文档信息,本文将重点解析“泛型编程与C...通过上述分析,我们可以看出,即使是在没有直接泛型支持的语言中(如C语言),也可以通过一些技巧实现泛型编程的效果。这对于理解和应用泛型编程原则是非常有益的。
总之,本项目通过C语言实现了顺序存储和链式存储的泛型队列,提供了一套完整的队列操作接口,适用于多种场景。理解和掌握这些知识点对于提升C语言编程能力和数据结构应用能力非常有帮助。通过阅读和分析项目中的代码...
然而,C语言本身并不直接支持泛型编程,这使得开发复用性强、可扩展的数据结构变得较为复杂。"cpp-这是一个关于数据结构的C语言静态链接库支持泛型"项目正解决了这一问题,它提供了一个静态链接库,允许C程序员在...
在STL中,泛型编程通过模板的使用来实现。模板允许开发者编写能够接受不同类型参数的函数或类,这样就可以创建出能够在不同数据类型上工作的通用算法和数据结构。 ##### 4.2 概念和模型 在泛型编程中,“概念”是...
泛型编程是一种编程范式,它允许程序员编写不依赖于特定数据类型的代码,从而提高了代码的复用性和灵活性。...通过深入理解和熟练运用C语言的类函数宏,可以有效地实现泛型编程,提升代码的可读性和效率。
最后,书中可能会包含大量实例,展示如何将这些理论应用到实际问题中,比如构建数据结构(如链表、树、图)、设计模式(如工厂模式、单例模式)的C语言实现,以及如何设计和实现复杂的系统接口。 总之,《C语言接口...
在libcstl中,迭代器的实现也是一个挑战,因为C语言没有内置的模板机制,所以可能需要使用函数指针或者其他方式来模拟泛型编程。 此外,STL还包含了算法库,如排序、查找、交换等。在C语言中实现这些算法需要更底层...
泛型编程则是利用模板实现的一种编程范式,它专注于设计在多种数据类型上都能工作的算法和数据结构。 C++模板的主要形式有函数模板和类模板两种。函数模板允许开发者定义函数的参数类型,编译器在编译时根据模板...
在C语言中实现数据结构如栈(Stack)是非常常见的练习,这有助于理解和掌握指针、内存管理以及数据结构的基本概念。栈是一种后进先出(LIFO, Last In First Out)的数据结构,常用于实现递归、表达式求值、函数调用...
在IT领域,泛型编程是一种强大的编程范式,它允许我们编写可以处理多种数据类型的代码。C++中的标准模板库(Standard Template Library, STL)就是泛型编程的一个典范,提供了高效且灵活的数据结构和算法。然而,...
在C语言中,泛型编程允许我们编写不依赖特定数据类型的代码。在交换两个变量的值这一常见任务中,泛型编程提供了两种策略:p99_swap1 和 p99_swap2。这两种方法都是为了确保在不同数据类型下正确地交换变量值,同时...
在C++中,`std::vector`是一种非常重要...C语言实现的向量库通常不会有C++中的`std::vector`那么便利,但通过巧妙的设计和编程,可以达到类似的效果。同时,由于C语言的特性,这个库可能更注重性能和内存管理的灵活性。
在C语言中,`sort`通常指的是排序算法的实现,特别是在C++标准库中,`std::sort`是一个常用的排序函数。然而,在纯C环境中,没有内置的`sort`函数,程序员需要自己实现排序算法。这里我们将探讨C语言中实现排序的...