【问题描述】在做《系统程序员成长计划》一书,通用双链表的过程中,发现了一个问题,所下所述:
源程序给出的测试代码如下所述:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "dlist.h"
DListRet print_int(void *data)
{
printf("%d ", (int)data);
return DLIST_RET_OK;
}
int main(int argc, char **argv)
{
int i = 0;
DList *dlist = dlist_create();
for(i = 0; i < 100; i++)
{
assert(dlist_append(dlist, (void *)i) == DLIST_RET_OK);
}
for(i = 0; i < 100; i++)
{
assert(dlist_prepend(dlist, (void *)i) == DLIST_RET_OK);
}
dlist_print(print_int, dlist);
printf("\n");
dlist_destroy(dlist);
return 0;
}
现在的问题是,如果插入的数据类型是浮点型,例如想连续插入0.0 1.0 2.0 ... 100.0,该怎么写?
*float类型的数据无法直接转换为void *类型。
我的思路是利用指针转换,测试的是整型,如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "dlist.h"
DListRet print_int(void *data)
{
printf("%d ", (int)data);
return DLIST_RET_OK;
}
DListRet print_int2(void *data)
{
printf("%d ", *(int*)data);
return DLIST_RET_OK;
}
DListRet print_float(void *data)
{
printf("%f ", *(float *)data);
return DLIST_RET_OK;
}
int main(int argc, char **argv)
{
int i = 0;
int *pi = &i;
float f = 2.5;
float *pf = &f;
float **pf2 = malloc(sizeof(float));
DList *dlist = dlist_create();
for(i = 0; i < 100; i++)
{
assert(dlist_append(dlist, (void *)pi) == DLIST_RET_OK);
}
for(i = 0; i < 100; i++)
{
assert(dlist_prepend(dlist, (void *)pi) == DLIST_RET_OK);
}
printf("i = %d, *pi = %d\n",i,*pi);
dlist_print(print_int2, dlist);
printf("\n");
dlist_insert(dlist, 10, (void *)pf);
dlist_get_by_index(dlist, 10, (void **)pf2);
print_float(*pf2);
dlist_get_by_index(dlist, 20, (void **)pf2);
print_int(*pf2);
dlist_destroy(dlist);
return 0;
}
测试发现,输出如下:
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
2.500000 -1080211936
完全不是我需要的结果,有人能解释一下原因吗?那么,如何连续的插入浮点型数据呢?本人先谢过了。
【代码下载】
http://download.youkuaiyun.com/detail/tandesir/4492717