记录学习的第五天
今天在blink里面看到了个好玩的。
直接看代码:
int x=4;
printf("%d",sqrt(x));
是不是很简单,但是代码运行后结果可不是2;而是0!
这是怎么回事呢,我们知道,sqrt这个函数返回值是double类型,把一个double类型的值以%d形式输出,C语言是识别不了的,所以它的输出是0;
那我们改一下代码试试!
int x=4;
printf("%d",(int)sqrt(x));
既然sqrt的返回值是double类型,我就给他强转成int再以%d输出,奈斯,输出果然是2;
那有的同学会说,我记得sqrt函数里面的参数也是double类型啊,你这个x是int型,为啥不强转成double型就好使!
这里呢,原因是C语言提供了一种隐试类型转换,也就是说,int型变量是可以自动转换成double类型的,所以sqrt(x)其实C语言自己把它变成了sqrt(double(x))了;就不用你来做这件事了,所以!
int x=4;
printf("%lf",sqrt(x));
这样输出,也是正确的,但是这次是输出的2.000000的double型;
那会不会有这样的疑问,是int型不能转换成double型吗,恩…
当然不能!
这种隐式类型转换肯定是有规则啦,我在网上找到了一张图,请看:
你会发现,double是老大,其实也就是精度越大的类型他就越牛;
int也就算是个小老弟
谁都能欺负欺负他,okk,今天就到这里了!
主要介绍了一下C语言的隐式类型转换;
完事!