帮我解释下这个C语言题目

[复制链接]
查看11 | 回复4 | 2010-5-13 01:53:28 | 显示全部楼层 |阅读模式
#include
main()
{
char *str = “12345〃;
printf(”%c %c %c\n”, *str, *(str++), *(str++));
}
会输出什么?为什么···

回复

使用道具 举报

千问 | 2010-5-13 01:53:28 | 显示全部楼层
#include /*更正一下*/main(){char *str = “12345〃;printf(”%c %c %c\n”, *str, *(str++), *(str++));}会输出为什么,取决于函数参数的传递方式,一般默认方式为从右到左因此,传递的变量值(从左到右)分别是: *(str+2),*(str+1),*str所以显示结果应该为:3 2 1
回复

使用道具 举报

千问 | 2010-5-13 01:53:28 | 显示全部楼层
输出:3 2 1(在TC或VC++6.0中运行)原因:在TC和VC++6.0中printf语句中是按照自右至左的顺序求值的,也就是说第3个指针指向的是[0],第2个指针指向的是[1],第1个指针指向的是[2],从右到左先使用后自增。
回复

使用道具 举报

千问 | 2010-5-13 01:53:28 | 显示全部楼层
输出1 1 1因为str要到下一句才会变化
回复

使用道具 举报

千问 | 2010-5-13 01:53:28 | 显示全部楼层
输出:1 1 1printf优先获得*(str),*(str++),*(str++)的值进行输出,(str++)先取值再进行++计算,所以取得的3个值都为1之后str++计算了2次 所以最后str指向的是'3'
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行