关于C语言数据类型转换的一个小问题,很简单哦!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C语言数据类型转换的一个小问题,很简单哦!!相关的知识,希望对你有一定的参考价值。
chara;intb;floatc;doubled; 则表达式a*b+c-d值的类型是什么? 请解释一下原理啊,谢谢
参考技术A 数据类型转换有两种:a强制类型转换,通过函数实现,如
charc='a';inti;i=int(a);//强制转换,但不会改变a本身的类型。
b自动类型转换,通过编译器自动实现,
不同类型的数据在一个表达式中会自动转换为最长的类型:
如你定义的chara;intb;floatc;doubled;
计算a*b+c-d时,按计算顺序说明类型转换:
1a*b//char类型的a转换为int类型的值,再和int类型的b相乘
2a*b+c//int类型的a*b转换为float类型值,再和float类型的c相加
3a*b+c-d//float类型的(a*b+c)转换为double类型的值,再和double类型的d相减
不考虑过程,最终表达式的值为最长类型(这里是double)的值
关于C语言的语法中类型转换的一个问题。求教C语言高手。
在Lua语言的源代码中有如下宏定义:
#define UNUSED(x) ((void)(x)) /* to avoid warnings */
有如下用法:
static void f_luaopen (lua_State *L, void *ud) global_State *g = G(L);// get global_State ptr saved in lua_State UNUSED(ud);// 这一句看不懂,求指导~ stack_init(L, L); /* init stack */ sethvalue(L, gt(L), luaH_new(L, 0, 2)); /* table of globals */ sethvalue(L, registry(L), luaH_new(L, 0, 2)); /* registry */ luaS_resize(L, MINSTRTABSIZE); /* initial size of string table */ luaT_init(L); luaX_init(L); luaS_fix(luaS_newliteral(L, MEMERRMSG)); g->GCthreshold = 4*g->totalbytes;
我不知道上面函数中第二句的作用。求指教!谢谢!
就像#define PI 3.14一样
所以那句在编译的时候按照((void)(ud))编译追问
谢谢您的回答!
我能理解您的意思。但是单独的一行转换
((void)ud);
有什么意义呢?
下面是源代码:
你注释说的很清楚了 避免警告 如果ud只定义不使用 编译时就会有警告 单独这一句就是为了使用它 避免警告 你可以把这句注释掉再编译试试 比较不同
追问学习了!谢谢您!
本回答被提问者采纳以上是关于关于C语言数据类型转换的一个小问题,很简单哦!!的主要内容,如果未能解决你的问题,请参考以下文章