第八章 为什么程序员无法分清万圣节和圣诞节

本文探讨了C语言中的类型转换现象,包括类型提升和隐式类型转换,并通过实例展示了如何使用强制类型转换来实现qsort函数的正确调用。此外,还提到了一种解决hash问题的方法。

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

1,类型提升:
在C的表达式中,每个char都被转换为int,每个表达式中的float被转换为double。
由于函数参数也是一个表达式,所以当参数传递给函数时,也会发生类型转换。
如:
sizeof(‘a’);
C结果:4
C++结果:1
printf(“%d”); %d可以适用short,char和int,因为他们都会被转换为int。

2,隐式类型转换是语言中的一种临时手段,起源于简化最初的编译器的想法。
把所有的操作数转换为统一的长度极大地简化了代码的生成。这样压到堆栈中的参数都是同一长度,所以运行时只需要知道参数的数目,而不需要知道它们的长度。

3,编写链表法解决hash,可以先让hash值返回0。
做法:把编程问题分解成几个部分往往是解决它的最快方法。

4,关于强制类型转换:

#include <stdio.h>
#include <stdlib.h>

/*
qsort的声明:
void qsort(void base, size_t nel, size_t width, int(*compar)(const void*, const void*));
*/
typedef int(*compar)(const void*, const void*);
int intcompare(const int* i, const int* j)
{
return (*i-*j);
}

void Output(int data[], int n)
{
int i;
for(i = 0 ; i < n ; i++ )
printf("%d ",data[i]);
printf("\n");
}

int main()
{
int data[]={73, 22, 93, 43, 55, 55, 14, 28, 65, 39, 81};
int n=sizeof(data)/sizeof(data[0]);
//注意下面的强制转换。
qsort(data,n,sizeof(data[0]),(compar)intcompare);
Output(data,n);
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值