网站运营与建设作业,上海十大装修公司品牌,哈尔滨模板建站公司推荐,asp.net 4.0网站建设基础教程 下载1.概念
在C语言中引入函数的概念#xff0c;有些翻译为子程序。C语言中的函数就是一个完成某项特定任务的一小段代码#xff0c;这个代码是有特殊的写法和调用方法的。一般我们可以分为两种函数#xff1a;库函数和自定义函数。
2.库函数
C语言国际标准ANSIC规定了一些常…1.概念
在C语言中引入函数的概念有些翻译为子程序。C语言中的函数就是一个完成某项特定任务的一小段代码这个代码是有特殊的写法和调用方法的。一般我们可以分为两种函数库函数和自定义函数。
2.库函数
C语言国际标准ANSIC规定了一些常用的函数的标准被称为标准库那不同的编译器厂商根据ANSIC提供的C语言标准就给出了一系列函数的实现。这些函数就被称为库函数。
在使用库函数时我们可以借用网站来更好地运用各种函数。
3.自定义函数
自定义函数的形式如下
ret_type fun_name(形式参数)
{}
在上述中
1.ret_type 是函数的返回类型
2.fun_name 是函数名
3.括号中放的是形式参数
4.{}括起来的是函数体
3.1 函数的举例
写一个加法函数完成2个整型变量的加法操作
int Add(int x, int y)
{return x y;
}int main()
{int a 0;int b 0;scanf(%d %d, a, b);int c Add(a, b);printf(%d\n, c);return 0;
}
4.形参和实参
在函数使用的时候我们把函数的参数分为实参和形参。
在函数定义的部分函数名后边的参数叫形式参数简称形参。 在调用函数时真实传递给函数的参数叫实际参数简称实参。
4.1 形参和实参的关系
通过对于代码的调试和运行结果的关系我们可以看出形参只是实参的一份临时拷贝。
5.return语句
在函数的设计中经常会出现return语句那么return语句的注意事项有
1.return后边可以是数值也可以是一个表达式。
2.return后边也可以什么都没有直接写return。
3.如果return返回的值和函数返回类型不一样系统会自动将返回的值隐式转换为函数的返回类型。
4.return语句执行后函数就彻底返回后面的代码不再执行。
5.如果函数中存在if等分支语句则要保证在每种情况下都有return返回否则会出现编译错误。
6.数组做函数参数
在使用函数解决问题时难免会将数组作为函数传递给参数在函数内部对数组进行操作。
例如
void set_arr(int arr[10], int sz)
{int i 0;for (i 0; i sz; i){arr[i] -1;}
}int main()
{int arr[10] { 1,2,3,4,5,6,7,8,9,0 };int sz sizeof(arr) / sizeof(arr[0]);//写一个函数将数组的内容全部置为-1set_arr(arr, sz);return 0;
}
注意
1.数组在传参的时候实参就写数组名就行形参也是数组的形式。
2.实参和形参的名字是可以一样的也可以不一样。
3.函数在设计的时候尽可能功能单一。
4.数组在传参的时候形参的数组和实参的数组是同一个数组。
5.形参如果是一维数组数组大小可以省略不写如果是二维数组行可以省略但是列不能省略。
7.嵌套调用和链式访问
7.1 嵌套调用
假设我们要计算某年某月有多少天
int is_leap_year(int y)
{if ((y % 4 0 y % 100 ! 0) || y % 400 0)return 1;elsereturn 0;
}int get_days_of_month(int y, int m)
{int days[13] { 0,31,28,31,30,31,30,31,31,30,31,30,31 };int day days[m];if (is_leap_year(y) m 2){day;}return day;
}int main()
{int year 0;int month 0;scanf(%d %d, year, month);//计算int day get_days_of_month(year, month);printf(%d\n, day);return 0;
} 7.2 链式访问
所谓的链式访问就是将一个函数的返回值作为另外一个函数的参数像链条一样将函数串联起来就是函数的链式访问。
下面有一个有趣的例子
int main()
{printf(%d, printf(%d, printf(%d, 43)));return 0;
}
我们可以猜一下结果应该是什么
运行一下我们可以看到—— 那么为什么结果是这样的呢
printf返回字符的个数。
8.函数的声明和定义
8.1 单个文件
//函数声明
#includestdbool.h
bool is_leap_year(int y);//或者可以写成——
//bool is_leap_year(int),即形参的名字可以不写//函数调用
int main()
{int year 0;scanf(%d, year);if (is_leap_year(year))printf(%d 是闰年\n, year);elseprintf(%d 不是闰年\n, year);return 0;
}
//函数定义bool is_leap_year(int y)
{if ((y % 4 0 y % 100 ! 0) || y % 400 0){return true;}elsereturn false;
}
8.2 多个文件
多个文件的使用在数据结构中和多代码的项目中运用较广泛。 8.3 static和extern
static是静态的 的意思可以用来
1.修饰局部变量
2.修饰全局变量
3.修饰函数
extern是用来声明外部符号的。
8.3.1 作用域和生命周期
作用域是程序设计概念通常来说一段程序中代码所用到的名字并不是总是有效的而限定这个名字的可用性的代码范围就是这个名字的作用域。
局部变量的作用域是变量所在的局部范围
全局变量的作用域是整个工程
生命周期指的是变量创建到变量销毁之间的一个时间段。
8.3.2 static修饰局部变量
编译器在编译代码时就为静态变量分配了地址而不是进入函数创建这种变量
static修饰局部变量改变了变量的生命周期生命周期改变的本质是改变了变量的存储类型本来一个局部变量是在内存的栈区的但是被static修饰后就存储到了静态区。存储静态区的变量和全局变量是一样的。
8.3.3 static修饰全局变量
全局变量默认是带有外部链接属性的static修饰全局变量时改变了全局变量的链接属性使得外部链接属性变为内部的链接属性。
8.3.4 static修饰函数
函数有外部链接属性的static修饰函数时改变了函数的链接属性。