C语言中函数参数处理顺序 c语言函数的参数分为哪两种

关于C语言的参数传递顺序……楼主您好,首先您要理解一下i++的行为,即先用i,然后再++,所以,传递参数时先用i=1的值,用完了然后++ , 即先用x=y=1=i,然后i=2;我把程序给您改一下 , 你就会根据结果看的很明白了 。
#include
stdio.h
int
f(int
x,int
y)
{
printf("x=%d\n",x);//显示传递过来的i值
printf("y=%d\n",y);
//显示传递过来的i++值
if(xy)
return
1;
else
if(xy)
return
-1;
else
return
0;
}
int
main()
{
int
i=1;
int
k;
k=f(i,i++);
printf("i=%d\n",i);//显示执行完函数后i的值
printf("k=%d\n",k);
return
0;
}
结果:x=1
y=1
i=2
k=0
楼主您的部分理解是对的,而结果有时候跟编译器有关,它的编译顺序是不一样的 。
f(++i,i)
和f(i,++i)运行结果都与理解一致,
f(i++,i)
和f(i,i++)运行结果与理解不一致;++是一种缩写,对于y=i++,就是y=i , 然后i=i+1;对于y=++i,就是i=i+1,然后y=i.
C语言参数中表达式计算顺序问题C语言C语言中函数参数处理顺序的运算符主要用于构成表达式C语言中函数参数处理顺序,同一个符号在不同的表达式中,其作用并不一致 。下面按计算的优先顺序 , 分别说明不同作用的表达式 。需要特别指出 , 在C语言标准中,并没有结合性的说法 。
相同优先级运算符,从左至右依次运算 。注意后缀运算优先级高于前缀 。因此++i++应解释为++(i++) 。
而与或非的运算优先级都不一样,因此ab || bc解释为(ab) || (bc)
合理使用优先级可以极大简化表达式 。
基本表达式 1级
基本表达式(Primary expressions),主要是用于运算符之间,做为运算数 。
标识 , 常量,字符串文字量 , 优先级提升表达式最优先执行 。
优先级提升表达式是指圆括号包围的表达式,如“( expression )”
后缀表达式 2极
postfix-expression [ expression ],数组下标运算 。
postfix-expression ( argument-expression-list),函数调用 , 括号内的参数可选 。
postfix-expression . identifier,成员访问 , 
postfix-expression - identifier , 成员访问,-号之前应为指针 。
postfix-expression ++,后缀自增
postfix-expression --,后缀自减
( type-name ) { initializer-list }
( type-name ) { initializer-list , } 复合初始化,C99后新增 。例如
int* a = (int[]) { 1, 2, 3 };
//等价于 int unamed[] = {1, 2, 3}; //unamed表示一个不可见的变量名 。
int* a = unamed;
单目/一元运算 3级
++ unary-expression 前缀自增
-- unary-expression 前缀自减
【C语言中函数参数处理顺序 c语言函数的参数分为哪两种】unary-operator cast-expression 单目转型表式式, 包括 取地址 ,提领 *,正号+  , 负号- 位反~ 逻辑否! 。
sizeof unary-expression 求类型长度,对表达式求类型长度
sizeof ( type-name ) 求类型长度
强制类型表达式 4级
( type-name ) cast-expression,强制表达式成为type-name指定的类型 。
乘法表达式 5级
“ * ” 乘法运算符;“ / ”除法运算符;“ % ” 取余运算符 。
加法运算符 6级
“ + ”加法运算符;“ - ”减法运算符 。
移位运算符 7级
左移运算符; 右移运算符 。
关系运算符 8级
、=、、=关系运算符 。
相等运算符 9级
“ == ”等于运算符;“ != ”不等于运算符 。

推荐阅读