关于一个c语言中的小陷阱(数据类型之间的转换)
来源:互联网 发布:linux下部署jenkins 编辑:程序博客网 时间:2024/06/09 11:07
在周师兄处看到这样一小段代码:
#include<stdio.h>#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0])) int array[] = {23,34,12,17,204,99,16}; int main() { int d; for(d=-1;d <= (TOTAL_ELEMENTS-2);d++) printf("%d\n",array[d+1]); return 0; }
当时虽然觉得有点奇怪,不过也自以为没什么可看的,输出一个数组么。
不过一运行,就坑爹了-------控制台里一行输出都没有!!什么情况。。。
后来搞了半天,总算弄清楚了:sizeof()运算符返回的数据类型为unsinged int,而d为int。当int 与 unsigned int进行运算时,int会自动转换成unsigned int,而d为32位,-1的int型为全1。当d转换成unsigned后,d就变成了一个很大的数,为2^32-1.如此一来,在for语句的<=判断时,d自然大于(TOTAL_ELEMENTS-2)。后者仅仅等于5.所以for循环的第1次条件判断就没有通过,自然就进不了循环体了。
可以这样改:
for(d=-1;d <= (int)(TOTAL_ELEMENTS-2);d++) printf("%d\n",array[d+1]);
在运算之前将后者强制转换为int型。
0 0
- 关于一个c语言中的小陷阱(数据类型之间的转换)
- C语言中数据类型转换“陷阱”
- c语言数据类型陷阱
- 关于基本数据类型转换的一个小问题
- C语言中的基本数据类型--数据之间的混合运算
- C语言中的基本数据类型--数据之间的混合运算
- 一个PHP语言的小陷阱
- 关于C语言的一个小程序
- 关于C语言的一个小问题
- C语言变量类型隐式转换小陷阱
- c语言数据类型的转换
- C语言数据类型的转换
- c语言数据类型的转换
- C语言的数据类型转换
- C语言中的数据类型转换-横向箭头的真正意思
- 一个C语言的浮点陷阱
- 一个C语言的浮点陷阱
- 面试题: 看下面的程序是否有问题 如果有问题请指出 并说明 (关于数据类型-隐性转换的小陷阱)
- hdu3172
- 插入排序
- Maven学习笔记之maven插件的配置
- zend studio10.6配置xdebug版本是否线程安全
- ZDAPP_CONFIG_PAN_ID
- 关于一个c语言中的小陷阱(数据类型之间的转换)
- 关于ArrayList的5道面试题
- spark+openfire二次开发(二)
- 在Eclipse上建立Openfire工程的过程
- 小米3观感:说说时下手机圈里的那些人和事
- C++中的前缀、中缀、后缀表达式转换
- hibernate annotations和hbm.xml配置文件并存配置
- 零配置,SSH全注解
- 欧拉函数的应用 : TOJ 3611 Calculation 2 && TOJ 3300 Euler Function