首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

(第三章 一)通用数组(void*)的归并排序

2012-08-25 
(第三章 1)通用数组(void**)的归并排序?? ? 我简化了书上的实现,每个数组元素是void*类型,两个void*元素的

(第三章 1)通用数组(void**)的归并排序

?? ? 我简化了书上的实现,每个数组元素是void*类型,两个void*元素的大小比较通过调用者提供的回调函数typedef int (*compare_fun)(void* a, void* b);实现

?

泣血的总结:

?

?? ? ? ?1. 减号“-”的优先级

>

? 按位右移“>>”的优先级


int len=3;

printf("%d\n",len);

printf("%d\n",len>>1);

printf("%d\n",len>>1-1);

printf("%d\n",(len>>1)-1);


2. 数组越界操作,free()时运行时报错

如果数组在使用时候越界(例如,读写arr[k]内容,而k大于等于arr长度)。当使用完数组arr并释放它时,会(运行时)报错:

*** glibc detected *** : free(): invalid next size (fast)


3. 学会释放int** 或者 void**

int length=...;

...

void** arr_tmp=(void**)malloc(length*sizeof(void*));//#include <stdlib.h>

...

free(arr_tmp);

arr_tmp=NULL; ???? ? ? ? ? ? ? ? ? ? ? ? ? ???? ? ? ? ? ? ? ? ? ? ? ? ? ???? ? ? ? ? ? ? ? ? ? ? ? ? ???? ? ? ? ? ? ? ? ? ? ? ? ? ???? ? ? ? ? ? ? ? ? ? ? ? ? ???? ? ? ? ? ? ? ? ? ? ? ??

?

?

sort.h

?

#include <stdio.h>#include <stdlib.h>#include "sort.h"//C语言中void*的长度和int的长度相等吗?如果这里换成double类型呢?int compare(void* a, void* b){return (int)a-(int)b;}void print(int* arr,int length){int i;for(i=0;i<length;i++){printf("%d\t",arr[i]);}printf("\n");}int main(void){int arr[]={5,3,4,2,6,3,1};print(arr,7);merge_sort((void**)arr,7,compare);print(arr,7);return 0;}
?

?

?

?

?

?

热点排行