函数的由来
面向过程的程序设计
面向过程是一种
以过程为中心的编程思想
首先
将复杂的问题分解为一个个容易解决的问题
分解过后的问题可以按照步骤一步步完成
函数是面向过程在C语言中的体现
解决问题的每个步骤可以用函数来实现
声明和定义
程序中的声明可理解为预先告诉编译器实体的存
在,如:变量,函数等等
程序中的定义明确指示编译器实体的意义
函数参数
函数参数在本质上与局部变量相同 , 都是在栈上分配空间
函数参数的
初始值是函数调用时的
实参值
例(错误示范):
#include <stdio.h>
int f(int i, int j)
{
printf("%d, %d\n", i, j);
}
int main()
{
int k = 1;
f(k, k++);//不能确定究竟是哪个先被调用,求值顺序依赖于编译器实现,因此避免这样写
printf("%d\n", k);
return 0;
}
result:
2 , 1
2
函数参数的求值顺序依赖于编译器的实现! !!
C语言中大多数运算符对其操作数求值的顺
序都是依赖于编译器的实现的 !!!
int i = f() * g();//因此无法确定其求值顺序
程序中的顺序点
程序中存在一定的顺序点
顺序点指的是执行过程中修改变量值的最晚时刻
在程序达到顺序点的时候,之前所做的一切操作必须反映到后续的访问中
#include <stdio.h>
int main()
{
int a = 1;
if( a-- && a )//a--,到&&后,到函数顺序点,a自减生效,&&后续a变成0
{
printf("a = %d\n", a);
}
return 0;
}
每个完整表达式结束时
&&
,
||
,
?,:, 以及
逗号表达式的每个运算对象计算之后
函数调用中
对所有实际参数的求值完成之后(进入函数体之前)(值传递 拷贝值之前 完成)
函数的缺省认定
C语言会默认没有类型的函数参数为int
C语言是一种面向过程的语言
函数可理解为解决问题的步骤
函数的实参并没有固定的计算次序
顺序点是C语言中变量改变的最晚时机
函数定义时参数和返回值的缺省类型为int
写代码不要写带有争议性的语句!!!!
灰色地带,k+++k++,f(k, k++)等类似的