Horbyn4zZ 2017-02-12 15:43 采纳率: 100%
浏览 1840
已采纳

谁能帮我解释一下这个函数是怎么运行的

#include

int SQ(int y){
return ((y)*(y));
}

int main(){
int i=1;
while(i<=5){
printf("%d^2 = %d\n", (i-1), SQ(i++));
}
return 0;
}

运行结果:
1^2 = 1
2^2 = 4
3^2 = 9
4^2 = 16
5^2 = 25

问题1:当i=1时,执行“printf("%d^2 = %d\n", (i-1), SQ(i++));”,打印i-1不是先输出0吗?

问题2:sq(i++)函数是怎么运行的

  • 写回答

8条回答 默认 最新

  • threenewbee 2017-02-12 15:48
    关注

    这个程序的结果在不同编译器上可能不同,关键看函数参数求值顺序。
    一般来说(但是不是所有编译器都是如此),参数从后往前求值。
    当i = 1的时候
    printf("%d^2 = %d\n", (i-1), SQ(i++));
    相当于
    printf("%d^2 = %d\n", 1, SQ(1));
    SQ里i就是1,然后i++,然后i-1还是1,作为前一个参数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型