[未解决]《系统程序员成长计划》学习交流(6)-双链表插入浮点数

在学习《系统程序员成长计划》时遇到双链表插入浮点数的挑战。由于float类型不能直接转换为void *,作者尝试通过指针转换插入整型数据,但测试结果不符合预期。寻求解决方案,以便能够连续插入0.0到100.0的浮点数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题描述】在做《系统程序员成长计划》一书,通用双链表的过程中,发现了一个问题,所下所述:

源程序给出的测试代码如下所述:

#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

 

 


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值