说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

一程序结果疑惑求解

编辑:说三道四文库 发布时间:2018-02-25 04:08
HTML文档下载 WORD文档下载 PDF文档下载
main()
{
int j=3,k=0;
k=(j++)+(j++)+(j++);
printf("(j++)+(j++)+(j++)=%d",(j++)+(j++)+(j++));
}
这个程序的结果是21(Turbo c/c++ 3.0),不是应该12吗?!
怎么解啊?求各位帮帮忙
k=(j++)+(j++)+(j++); 
每个编译器的处理可能都不一样的。
一般是
k=j+j+j;
j++;
j++;
j++;

void main() 

int j=3,k=0; 
k=(j++)+(j++)+(j++);   //等价于这种形式 k = j+j+j;j++;j++;j++//
printf("k = %d,  j = %d\n",k,j); 
printf("(j++)+(j++)+(j++)=%d\n",(j++)+(j++)+(j++)); //实质上是6+6+6,之后j++;j++,j++
printf("now j = %d\n",j); //此时 j=9


在VC环境下,你的答案是18
程序中的解释是按 C++语法
不知这么解释搂住明白不?
是21啊,其实有两个(j++)+(j++)+(j++)都增加了。
k=(j++)+(j++)+(j++)
其实是k=4+5+6 = 15;(注意j++ 两旁加了括号则不存在 j++ ,和 ++j 的区别了 都是 先 加 一 );
然后在输出函数中 (j++)+(j++)+(j++) = 6 + 7 + 8 = 21 ;
这题在一视频是这样讲解的(它是在TURbo c 2.0下运行的,结果是12)在输出函数中(j++)+(j++)+(j++)=3+4+5,j++和++j还是一样区分的;
现在都不是这样算了吗?

每个编译器的处理可能都不一样的。 
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘