Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1585080
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类: LINUX

2009-11-11 15:41:13

下面这段小程序的本意是打印出数组中的所有成员:

#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;
}


但 是实际的运行结果却不是这么回事。如果编译并运行这段程序的话,你看不到任何输出。这是为何?问题的根源其实在于C语言的类型转换。sizeof()运算 符返回的值是unsigned int型的,因此,int型的d将被自动被转换为unsigned int型,但是这个转换将导致问题。因为d的初值是-1,int型的-1转换为unsigned int型后是一个非常大的数字。因此,for循环的第一次判断就会失败,于是for循环一次都得不到执行,自然也就看不到任何输出了。
那么,应该如何解决这个问题呢?很简单,将sizeof()的运算结果显式转换为int即可。如下所示:

for(d=-1;d <= (int)(TOTAL_ELEMENTS-2);d++)


这样就能得到正确的结果了。
阅读(1326) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~