【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;
}
分析: