函数
一个函数需要在最前面声明,声明需要包括 函数返回值的类型,函数的名称,函数的参数个数与类型(参数的名称可以省略,名称也可以和实际函数调用的名称不一致)
void sum(int , int ); //声明
- 在函数调用的过程中如果类型不匹配,c语言编译器会自动进行类型转换,有些编译器会有个warning提示有的不会。
float b=23.6;
number(b);
void number(int i)
{
printf("number is %d\n",i);
}
这里将直接输出23,编译器没有提示就自动将数据类型进行转换了,这正是C语言的一个漏洞,可能导致错误。
- 参数的传递
int a = 5;
int b = 6;
swap(a,b);
void swap(int a,int b)
{
int t =a;
a = b;
b = t;
}
在主函数中的a,b,与子函数swap中的a,b虽然同名,但是没有任何关系,仅仅是主函数中的a和b将值5和6传递给子函数中的a,b.除此之外无关系。
- 本地变量,局部变量(local)
函数每次运行,就产生了一个独立的变量空间,在这个空间中的变量,是函数的这次运行说独有的。
定义在函数体内部的变量和参数都是本地变量。
如上文的程序,当程序进入到swap函数中时,函数外的a,b访问不了了,找不到了,只能访问swap里确定的a,b,t ,变量和参数有他自己的作用域和空间,这个空间由大括号区分,如
if (a >b)
{
int i;
}
{
int a;
}
这两个块的变量都是不同的。
- 函数没有参数
void swap(void); //函数没有参数
void swap(); //表示不知道参数,当你传入参数时,系统会猜测你是整形参数,可能导致错误
swap(1,2);
void swap(double a, double b)
{
printf("a=%d,b=%d\n",a,b); \\会显示两个很奇怪的数字
}
所以在定义函数的时候一定要指明参数类型,没有参数就写void,不要空着。
- main函数
//main有很多种写法
int main(void)
{
return 0; //给出一个返回值,返回0表正确,非0表错误
}
void main(void)
void mian();
int main(); //可以但是不规范
main(int argc, char*argv[]); //linuX里的写法,为什么??