Sign-up....

大家来看看这个程序的结果噢!晕~~

main()

{

int a[5]={2,3,4,5,6},*p=a,c=0;

if((*p)++==a[0]++)

c=1;

printf("%d,%d \n",a[0] ,c);

a[0]=(*p)++;

printf("%d,%d \n",a[0] ,c);

getch();

}

不同的编译器会有不同的结果吗?

这句if((*p)++==a[0]++)什么意思啊??

[281 byte] By [msdn] at [2007-9-26 8:20:36]
# 1 Re: 大家来看看这个程序的结果噢!晕~~

是的,不同的编译器可能会有不同的结果,

因为你这里的*p和a[0]是一个对象,而这里先执行(*p)++还是a[0]++不一定,是要依赖于编译器的。

这句的意思不好说,不一定

winstonch at 2005-1-21 10:15:07 >
# 2 Re: 大家来看看这个程序的结果噢!晕~~

if((*p)++==a[0]++)等价与if(*p==a[0]){*p++;a[0]++;}吗?

drizzlecrj at 2005-1-21 10:22:01 >
# 3 Re: 大家来看看这个程序的结果噢!晕~~

if((*p)++==a[0]++)等价与if(*p==a[0]){*p++;a[0]++;}吗?

不等价

前者不关是否相等

*p ,a[0],都是要做自加操作的

后者你写的是如果相等才会自加

kobefly at 2005-1-21 10:29:13 >
# 4 Re: 大家来看看这个程序的结果噢!晕~~

有可能不一样,因为a[0]++不会修改*p的值,但是(*p)++却会修改a[0]的值

要看编译器先执行if语句里的(*p)++还是a[0]++

Rodge at 2005-1-21 10:38:08 >
# 5 Re: 大家来看看这个程序的结果噢!晕~~

不等价,这样的结果不确定,编译器依赖

winstonch at 2005-1-21 11:51:27 >
# 6 Re: 大家来看看这个程序的结果噢!晕~~

if((*p)++==a[0]++)应该是if((*p)++==a[0++])

Irv at 2005-1-21 15:04:47 >
# 7 Re: 大家来看看这个程序的结果噢!晕~~

(*p)++指向a数组中连续地址的下一地址,也就等于a[0++]了,该条件成立

程序输出2和1

Irv at 2005-1-21 15:10:41 >
# 8 Re: 大家来看看这个程序的结果噢!晕~~

*(p++)

Irv at 2005-1-21 15:23:11 >
# 9 Re: 大家来看看这个程序的结果噢!晕~~

我遇到最诡异的是你这样写,有的编译器会自加2次。。。。。。。。。

wenquan81 at 2005-1-21 16:06:31 >
# 10 Re: 大家来看看这个程序的结果噢!晕~~

vc6.0下结果是

4,1

5,1

if((*p)++==a[0]++)的判断肯定是成立的

因为p,a指向的数组第一个元素的地址,所以*p,a[0]都是第一个元素的值

然后是两次++,所以第一次输出的是4,1

master5470 at 2005-1-25 11:56:31 >
# 11 Re: 大家来看看这个程序的结果噢!晕~~

跟编译器有关

alever513 at 2005-1-25 14:05:11 >
# 12 Re: 大家来看看这个程序的结果噢!晕~~

dev c++

4,0

5,0

不知道何故

想想

captainivy at 2005-1-25 14:41:00 >

C/C++

All Classified