上节课回顾:
homework:
strcpy()
strcmp()
strcat()
今日内容
一、函数
1.函数的基本概念
函数是把代码中功能相似并独立的代码单独封装成一个独立的整体。
(1)优点
提高代码的简洁性,提高开发效率。
提高代码的重要性。
有利于程序的维护。
(2)函数的分类
分类一:
系统函数
由C系统提供的函数,如:printf(),scanf(),gets(),purs()
调用系统函数时,只需要将其对应的头文件包含进来即可,
#include<stdio.h> pirntf("hello!");
pow(a,b) //计算a的b次方
toupper //小写转为大写
tolower //大写转为小写
自定义函数:用户根据需要自己定义的函数
分类二:
有返回值函数,函数调用结束,会返回一个数值给主调函数;
无返回值函数,函数结束后,没有返回值,一般定义为void类型,即空类型。
分类三:
有参数函数:参数可以任意多。
无参数函数
2.函数的基本定义
(1)无参函数的定义
DateType FunctionName() // 函数头 函数名
{
//函数体;
//可执行语句;
}
注:函数名后的括号 "()" 不可以省略!!
"{}"里的都是函数体。
(2)有参函数的定义
DateType FunctionName(Type arg1,Type arg2)
{
//函数体;
}
注:Type arg1,Type arg2:称为参数列表,可以很多个,参数类型(相对而言)可以任意!
(3)函数的定义,函数的声明已经函数的调用
函数的定义:
DateType FunctionName(参数列表)
{
//函数体;
}
函数的声明:(可有可无)
DateType FunctionName(参数列表); //";"不能省!!
注:声明时,参数列表一定要和定义时的参数列表一致!!
放在文件首,函数名表示函数的入口地址,告诉系统位置。
函数的调用:
FunctionName(value); //value:数值
注:函数调用时,实参值的类型,一定要和函数定义时的形参列表一致!!
实参:实际参数,具体的数值。
形参:形式参数,形参的定义和普通变量的定义无区别!
顺序:声明,自定义函数,main函数调用。
函数定义在调用后,需要声明。
函数之间没有优先级问题,函数之间是等价的,即平级。
形参在发生调用时分配空间!!
在发生函数调用时,系统会默认将实参值赋给形参。
函数的返回值
无返回值的类型函数类型为:viod。
ReturnvalueType FunctionName(参数列表)
{
//函数体;
}
ReturnvalueType:觉定了函数返回值的类型 int test{...return value}。一定要一致!!
若是int,则函数返回值为int型。
若为double,则返回值为double类型。
若是void类型的函数,则无返回值,return可有可无
若函数不是void类型,则必须要有return!!
4.return的作用
(1)函数遇到return则结束,后面的代码不再执行
(2)用于返回函数的值即执行结果
5.关键字
(1)变量分为全局变量和局部变量
全局变量:在函数体外定义的变量。
作用域:从变量定义处开始,直至本文件结束,定义之前不可使用。
在全局变量定义之前不可使用全局变量。
局部变量:在函数内定义的变量。
作用域:是整个函数。
函数结束时,系统会自动释放,因此不同的函数中可以使用相同的变量名。
若全局变量与局部变量重名,则屏蔽自动全局变量。
auto: 声明变量是动态变量,可以省略!
动态全局变量,作用域:从定义处开展至文件末,周期为整个程序运行期间。
动态局部变量,周期仅限于定义该变量的函数中。
如:
auto int a = 5;
int a = 5;
static: 声明变量为静态变量;
作用域:从定义处到文件结束,周期为整个程序运行期间。
若定义时未初始化,系统默认为0;
即使初始化,根据返回值来决定下一次使用的初值!!
静态全局变量
静态局部变量
静态函数:static修饰函数,则此函数只能用于本文件,其他文件中不可使用!!!!
extern: 声明为外部变量:extern int sum;
修饰函数:extern int test();
声明变量或函数在外部已定义;
register:寄存器变量:变量直接存放在寄存器中,速度快。
CPU的寄存器个数有限,不可以定义多个寄存器变量!!底层才会使用。
const:常量,不可更改其值。
例
const int num = 5; //只读变量5,不可更改。
int const num = 5; //只读变量5,不可更改。
const int *p; //值不可改
int const *p; //值不可改
int* const p; //地址不可改
const int* const p; //常指针常量 值与指针都不可更改。
6.函数的传参
传参都是单方向的,从主函数传到自定义函数。
值传递,传值,仅对值的操作,并没有改变变量地址里的内容。
地址传递,传址,对地址操作,修改变量对应地址的内容。
传参的方式:传值,传地址,传引用。
7.指针函数和函数指针
指针函数:int *test(); 函数为一个整型指针。
返回一个局部地址无意义,不允许。
注意返回值问题,返回的是一个地址!!
函数指针:int (pa)();类型是int ()(),即整型函数。
排版用时25分钟。