C语言中的泛型编程(void *)
来源:互联网 发布:java函数重载是指 编辑:程序博客网 时间:2024/06/05 23:59
C语言中的泛型编程(void *)
简介:之前有写过关于C++的泛型编程,使用template来实现的,也包括了一些函数模板,类模板的一些概念,那么在纯C的实现中,能不能也有这样的泛型?答案当然是可以的,这个时候就有必要使用所谓的万能指针,因为万能指针可以转换成其他的数据类型指针对象,这个时候就可以实现类型转换啦。
提示:
博主:章飞_906285288
博客地址:http://blog.csdn.net/qq_29924041
不多说,直接上代码:
#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<assert.h>/*使用void*指针来定义这样的交换函数,但是需要注意的是,在交换的时候,因为交换的是里面的数据,所以尽可能使用memcpy来对内存进行操作*/void *t;void swap(void* t1,void* t2,int size){ t = (void*)malloc(size); assert(t != NULL); memcpy(t,t1,size); memcpy(t1,t2,size); memcpy(t2,t,size);}extern void swap2(int *num_pointer1,int *num_pointer2){ int temp; temp = *num_pointer1; *num_pointer1 = *num_pointer2; *num_pointer2 = temp;}void out_array(const int* array,int num){ int i = 0; for(i = 0 ; i < num ; i++){ printf("array[%d]:%d\n",i,*(array + i)); } printf("===============\n");}int main(int argc,char *argv[]){ //注意一定要使用sizeof(XX) * num,否则在运行的时候,free的时候会抛出错误 int *array = (int *)malloc(10 * sizeof(int)); assert(array != NULL); printf("array,address%p\n",array); int i,j; printf("please input array\n"); for(i = 0 ;i < 10 ; i++){ *(array + i) = rand() % 100 +1; printf("%4d ",*(array+i)); } printf("\n"); out_array(array,10); for(i = 0; i < 9; i++){ for(j = i + 1 ; j < 10 ;j++){ if(*(array+i) < *(array+j)){ swap(array+i,array+j,sizeof(int)); swap2(array+i,array+j); } } } out_array(array,10); printf("array address:%p\n",array); free(t); free(array); return 0;}
注意的地方:
*** Error in `./select': free(): invalid next size (fast): 0x00000000012c61d0 ***
期初因为malloc的时候没有去使用10 * sizeof(int),而是直接就是10,所以抛出来了上述的错误,但是我打印出来的两个地址也是正确的,所以所以后来搜了下,原来申请的时候需要传入的参数需要是sizeof()得到的类型,而free的时候,也是根据这样的类型长度来free的。
阅读全文
1 0
- C语言中的泛型编程(void *)
- C语言中的 void*
- C语言void泛型指针
- C/C++语言中的void及void指针类型
- C/C++语言中的void及void指针类型
- C/C++语言中的void及void指针类型
- C语言中的void 和void 指针类型
- C/C++语言中的void及void指针总结
- C/C++语言中的void及void指针总结
- C/C++语言中的void及void指针总结
- C语言中的void 和void 指针类型
- C语言中的 (void*)0 与 (void)0
- C语言中的 (void*)0 与 (void)0
- C语言中的void 和void 指针类型
- C语言中的 (void*)0 与 (void)0
- C语言中的 (void*)0 与 (void)0
- 详解C语言中的VOID类型
- C语言宏定义中的void
- git segmentation fault
- 废人
- 通过Java代码装配bean
- JVM高级特性与实践(十):虚拟机字节码执行引擎(栈帧结构)
- Ubuntu 交叉编译openCV3.2 至s5pv210环境
- C语言中的泛型编程(void *)
- HBase根据rowkey删除表记录
- CSS定位之绝对定位
- 无法打开模块文件“C:\Users\fkg\AppData\Local\Temp\.NETFramework,Version=v4.5.AssemblyAttributes.vb”系统找不到指定文件
- Java-有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
- Mysql 5.7.19 winx64 解压缩版配置安装指南
- 南阳理工 acm1013除法表达式
- Java基础---模板
- 步进电机的一点收获