一个C语言问题

雪域迷影 2010-10-22 10:47:03
#include <stdio.h>
#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))
int main()
{
int array[] = {2,4,7,9,11,8,5,6};
int tmp,index = -1;
if(index <= TOTAL_ELEMENTS - 2)
tmp = array[index + 1];
printf("数据:%d\n",tmp);
return 0;
}
在不运行的情况下看看该程序输出结果是什么???为什么???
...全文
253 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxq1311 2010-10-22
  • 打赏
  • 举报
回复
int TOTAL_ELEMENTS = sizeof(arra)/sizeof(arra[0]);

int定义将sizeof返回的unsigned int强制转换成signed int.
yxfxidian 2010-10-22
  • 打赏
  • 举报
回复
输出的是随机数。但是将程序改成:

#include <stdio.h>
int main()
{
int arra[] = {2,4,7,9,11,8,5,6};
int tmp,index = -1;
int TOTAL_ELEMENTS = sizeof(arra)/sizeof(arra[0]);
if(index <= TOTAL_ELEMENTS - 2)
tmp = arra[index + 1];
printf("数据:%d\n",tmp);
return 0;
}就可以输出2.
求解释~
[Quote=引用楼主 ccf19881030 的回复:]
#include <stdio.h>
#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))
int main()
{
int array[] = {2,4,7,9,11,8,5,6};
int tmp,index = -1;
if(index <= TOTAL_ELEMENTS - 2)
tmp = array……
[/Quote]
半斗 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luciferisnotsatan 的回复:]
sizeof返回的是unsign int,无符号的
[/Quote]
所以index在比较时类型也成了unsigned int
manytao 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luciferisnotsatan 的回复:]

sizeof返回的是unsign int,无符号的
[/Quote]
正解
dodolzg 2010-10-22
  • 打赏
  • 举报
回复
ls说的没错~
luciferisnotsatan 2010-10-22
  • 打赏
  • 举报
回复
sizeof返回的是unsign int,无符号的
雪域迷影 2010-10-22
  • 打赏
  • 举报
回复
什么意思,麻烦哪位大虾说明白点!
shi3590 2010-10-22
  • 打赏
  • 举报
回复

if(index <= (int)(TOTAL_ELEMENTS - 2))

不转换没法比较。
dfatfat 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luciferisnotsatan 的回复:]
sizeof返回的是unsign int,无符号的
[/Quote]
强力!
正解!
clusterer 2010-10-22
  • 打赏
  • 举报
回复
回复7楼:
sizeof(arra)求的是数组所占的内存空间,值为32=4*8,sizeof(arra[0])值为4(同样为所占的内存空间),所以满足if条件,结果输出的为temp=arra[0]的值。
千杯不醉-sen 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 zph2254 的回复:]
引用 14 楼 xiaosi2468 的回复:
引用 12 楼 wyaibyn 的回复:

sizeof(array)楼主的意思是想得到那个数组的长度吗?
array只是一个指针,sizeof(array)的值应该是4


array是一个近指针,占两个字节

sizeof(array)的值应该是2

他们都错了,我运行了一下:
printf("%d ******\n",(……
[/Quote]
sizeof(array)); //32
sizeof(array[0])); //4
当让是这个值啊,lz算的是数组的长度好不
len = sizeof(array))/sizeof(array[0])) = 8
ZPH2254 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xiaosi2468 的回复:]
引用 12 楼 wyaibyn 的回复:

sizeof(array)楼主的意思是想得到那个数组的长度吗?
array只是一个指针,sizeof(array)的值应该是4


array是一个近指针,占两个字节

sizeof(array)的值应该是2
[/Quote]
他们都错了,我运行了一下:
printf("%d ******\n",(int)sizeof(array)); //32
printf("%d ******\n",(int)sizeof(array[0])); //4
NoverLei 2010-10-22
  • 打赏
  • 举报
回复
看过了,不太清楚。
shenlin1949 2010-10-22
  • 打赏
  • 举报
回复
先前错误是sizeof 返回unsigned int,在index <= TOTAL_ELEMENTS - 2比较时,宏定义值由unsigned int转化为整型;
下面int TOTAL_ELEMENTS = sizeof(arra)/sizeof(arra[0]),sizeof返回unsigned int,赋值时隐式转化为int型。所以结果为2。
千杯不醉-sen 2010-10-22
  • 打赏
  • 举报
回复
可以这样改一下:

#include <stdio.h>
#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))

int main()
{
int array[] = {2,4,7,9,11,8,5,6};
int tmp,index = -1;
tmp = TOTAL_ELEMENTS - 2;
if(index <= tmp)
tmp = array[index + 1];
printf("数据:%d\n",tmp);
return 0;
}
千杯不醉-sen 2010-10-22
  • 打赏
  • 举报
回复
if(index <= int(TOTAL_ELEMENTS - 2))
不转换没法比较。
xiaosi2468 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wyaibyn 的回复:]

sizeof(array)楼主的意思是想得到那个数组的长度吗?
array只是一个指针,sizeof(array)的值应该是4
[/Quote]

array是一个近指针,占两个字节

sizeof(array)的值应该是2
love暖色 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yxfxidian 的回复:]
输出的是随机数。但是将程序改成:

#include <stdio.h>
int main()
{
int arra[] = {2,4,7,9,11,8,5,6};
int tmp,index = -1;
int TOTAL_ELEMENTS = sizeof(arra)/sizeof(arra[0]);
if(index <= TOTAL_ELE……
[/Quote]

回复七楼
array只是一个指针,sizeof(array)的值应该是4
所以最后输出的是2
love暖色 2010-10-22
  • 打赏
  • 举报
回复
sizeof(array)楼主的意思是想得到那个数组的长度吗?
array只是一个指针,sizeof(array)的值应该是4
jihen 2010-10-22
  • 打赏
  • 举报
回复
int TOTAL_ELEMENTS = sizeof(arra)/sizeof(arra[0]);
if(index <= TOTAL_ELEMENTS - 2)
比较的时候是 两个整形在比较,
但是如果先用宏定义的话,返回unsigned int类型
那么比较的时候就是在比较两个unsigned 类型数据了
因为你的index为负数,所以,
unsigned 的第一位为1,可想而知有多大了,
判定肯定不是你想要的结果。
加载更多回复(1)

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧