当前位置: 代码迷 >> C语言 >> 这程序如何解释
  详细解决方案

这程序如何解释

热度:141   发布时间:2006-06-29 07:13:07.0
这程序如何解释
main()
{int i=10;
int y=i++;
printf("%d",y);
getch();
}
运行后的结果是: 10
如果是:
main()
{int i=10;
int y=i++;
printf("%d %d",y,y++);
getch();
}
运行后的结果是:11 10
不知如何解释……
搜索更多相关的解决方案: 解释  解释  

----------------解决方案--------------------------------------------------------
看编译器,如果函数的参数是从右到左传递就会出现这样的结果,先传递y++,再传递y
----------------解决方案--------------------------------------------------------
同时是tc编译
----------------解决方案--------------------------------------------------------
既然
main()
{int i=10;
int y=i++;
printf("%d %d",y,y++);
getch();
}
运行后的结果是:11 10
这就表明刚刚编译这段代码的编译器
在把函数实参推入堆栈时的先后顺序
为从右到左。TC恰好就是这样子的。

程序员要竭力避免书写此类有可能导致歧义的代码
----------------解决方案--------------------------------------------------------
哇。这样也可以的呀。。。。学习咯~~
----------------解决方案--------------------------------------------------------
main()
{int i=10;
int y=i++; //把i的值赋给变量y的内存单元,是10
printf("%d %d",y,y++);//从变量y的地址中取出10,放入堆栈,把y++的值11
} //放入堆栈,然后,再从堆栈中按函数格式先后输出
我是按照你的回答自己考虑的,不知对不对……
----------------解决方案--------------------------------------------------------

main()
{ int i=10;
int y=i++; //把i的旧值赋给变量y的内存单元,是10
printf("%d %d",y,y++);
// 先把式子y++的值10压栈,接着把y的值11压栈
}


----------------解决方案--------------------------------------------------------
main()
{int i=10;
int y=20;
printf("%d %d",x,y);
getch();
}
此时,为什么不先把x压栈,后y压栈,后输出y,x的值
[答]已经说了,TC总是先压最右边的,再逐渐往左进行
main()
{int i=10;
int y=20;
printf("%d %d %d",i,y,y++);
getch();
}
运行结果:10 21 20
输出顺序又乱了,按怎样的顺序输出
[答]一点也不乱。你把“压栈顺序”与输出顺序混淆起来啦
另:什么时候开辟堆栈?
[答]这种“栈”是编译器定义与使用的,程序员定义的一切
局部auto变量都使用到了这种“栈”内存


----------------解决方案--------------------------------------------------------
难道PRINTF的时候是从右开始运算的?

----------------解决方案--------------------------------------------------------
main()
{int i=10;
int y=i++;
printf("%d %d",y,y++);
getch();
}


C 语言的运算规则一般是从右到左,所以上面("%d %d",y,y++)这里先把y++求出,再进行自身+1,得出前面y的值,





----------------解决方案--------------------------------------------------------

  相关解决方案