1)全局变量和局部变量的程序代码
#include <stdio.h>
int a=10;//全局变量,在所有的函数内都能被使用,等程序结束后值才会被释放
void test(){
printf("%d\n",a);
a++;
}
int main(int argc,const char * argv[]) {
/* int a=30; 定义了不同的量
test(); 10
test(); 11
test(); 12
test(); 13
*/
a=30;//暂时改变a的值局部变量,在所在代码块{}内使用,当执行完代码块后值会被释放。当和全局变量重名时,那么在它这个函数里,会暂时遮盖全局变量。,结果30,31,32,33但代码块结束后,a的值释放。
test(); //30
test(); //31
test(); //32
test();//33
return 0;
}
#include <stdio.h>
void max(){
// 无参,函数名max,()参数列表没有可写可不写,可以写不同类型的变量用','隔开
}
//int max(){ //(不能定义同名的函数体)
//有参 返回值类型是int 类型
// 形参被定义后不会立马被分配内存,当实参赋值给形参的时候才会被分配内存空间。
//}
//实参和形参之间的转换:
// 在调用函数之前,实参是个确定的值
// 把实参的值赋值给形参
// 实参和形参的个数及类型要一致,防止精度丢失。
int sum(int x,int y){
x=10,y=20;//形参的值在函数内可以被修改,但是不会修改主调函数中实参的数据。
return x+y; // return 后面可以加括号也可以加不括号,结果是一样的。可以是常量,变量,表达式。return返回值要和返回类型要一致,如果类型不一致的话,要以函数定义的类型一致。
}
// 调用之前 形参定义的变量值是不会被改变,即使实参的值和形参定义的值不一样,打印的结果如代码所示。
int main(int argc,const char * argv[]) {
int d=sum(10,5);
printf("%d\n",d);
return 0;
}
#include <stdio.h>
void test(){}
void test1(int num){}
void test1();//声明函数的时候,形参名可以省略
void test4(){}
void test4(){}//函数不允许重名
void test3(){
void test9(){}//这样函数会报错,因为不能在同一个函数里继续定义一个新的函数。
}
void test2(); //函数的声明可以写n个
void test2();
void test2();
void test2();
int main(int argc,const char * argv[]) {//函数内可以声明调用其它函数。
// test();//被调用函数可以写在任何位置,但是函数的调用必须在调用之前声明函数
// return 0;
void test2();
test2();//告诉编译器,test2函数是有的,尽管编译,调用函数可以写在最后,但void test2();一定要写在调用之前来告诉编译器是有的。
4)带参数函数需要注意的地方
带返回值参数需要注意的地方:1.如果函数有返回值,我可以接收,也可以不接收,不管接没接收函数都有执行
2.接收返回值的时候,需不需要用同类型的变量来接收函数的返回值类型
基本数据里面,可以不用同类型,但是会发生强制转换
3.当函数需要返回类型的时候,需要每条分支都有返回值,不然会报错。如下面的代码。
4.但返回值类型是int时,可以省略int 但不介意使用,在Mac中兼容,但不符合C-99
5.返回值类型确定了,可以返回不同类型的数据嘛?
基本数据类型可以,但不推荐这么做。
*/
#include <stdio.h>
int test(){
int num;
if (num>0) {
printf("c");
return 1;
}elseif(num<=0){
printf("w");
return 2;
}//else { return 0;} 如果不加这条语句那么会报错
}
int main(int argc,const char * argv[]) {
test();
return 0;
}