大家来看看这个程序的结果噢!晕~~
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]++)什么意思啊??
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]++)什么意思啊??
是的,不同的编译器可能会有不同的结果,
因为你这里的*p和a[0]是一个对象,而这里先执行(*p)++还是a[0]++不一定,是要依赖于编译器的。
这句的意思不好说,不一定
if((*p)++==a[0]++)等价与if(*p==a[0]){*p++;a[0]++;}吗?
if((*p)++==a[0]++)等价与if(*p==a[0]){*p++;a[0]++;}吗?
不等价
前者不关是否相等
*p ,a[0],都是要做自加操作的
后者你写的是如果相等才会自加
有可能不一样,因为a[0]++不会修改*p的值,但是(*p)++却会修改a[0]的值
要看编译器先执行if语句里的(*p)++还是a[0]++
不等价,这样的结果不确定,编译器依赖
if((*p)++==a[0]++)应该是if((*p)++==a[0++])
(*p)++指向a数组中连续地址的下一地址,也就等于a[0++]了,该条件成立
程序输出2和1
*(p++)
我遇到最诡异的是你这样写,有的编译器会自加2次。。。。。。。。。
vc6.0下结果是
4,1
5,1
if((*p)++==a[0]++)的判断肯定是成立的
因为p,a指向的数组第一个元素的地址,所以*p,a[0]都是第一个元素的值
然后是两次++,所以第一次输出的是4,1
跟编译器有关
dev c++
4,0
5,0
不知道何故
想想