C语言中函数参数是自增或自减情况分析

【1】函数参数只是一种内存的复制拷贝,不对原数据(原只是相对于参数数据对象本身) 有何影响;

【2】++i, i++, 整个语句执行结束之后和执行之前才执行;

【3】需要考虑 函数参数入栈,出栈的顺序;

案例代码_0:

#include <stdio.h>

int fun(int a, int c, int d)
{

printf("a = %d  b = %d  c = %d \n", a , b, c);

return (a+b+c);

}


int main()

{

int i = 4;

printf("%d \n", fun(i++, i++, i++));

printf("%d \n', i);

return 0;
}


分析:



C语言函数参数采用自右向左的入栈顺序, 执行fun(i++, i++, i++); 参数逐个入栈,参数1,参数2,参数3先后入栈,参数3(i++)中的那个i以main函数中那个i值复制到参数3这块内存区域来,由于是i++,所以参数3等于4;参数2(i++)中的i又以参数3整个值为i赋值,由于参数2是i++,所以参数2等于4;...... 参数1也是4,对于最终的i结果的分析我们可以从整体宏观分析结果,i在fun()函数中经历了3次自增,因此i = 7;

输出结果是

a = 4, b = 4, c = 4;

res = 12;

i = 7;


案例代码_1:

#include <stdio.h>

int fun(int a, int b, int c, int d, int e)

{

printf("a = %d b = %d c = %d d = %d e = %d\n", a, b, c, d, e);

return (a+b+c+d+e);

}


int main()

{

int i = 4;

printf("res = %d\n", fun(i++, ++i, ++i, --i, i--));

printf("i = %d\n", i);

return 0;

}


分析:





  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值