函数的基本概念
函数就是代码中功能相似并且独立的代码单独封装成一个独立的整体;
(1)函数的特点
提高代码的简洁性,提高开发效率。
提高代码的重要性
有利于程序的维护
(2)函数的分类
分类1
系统函数:
有c标准库提供的函数如printf(),gets(),
puts(),用系统函数时,只需将其对应的头文件包含进来即可,
#include<stdio.h> ==============printf("hello!");
pow(a,b);===========计算a的b次方
自定义函数:
用户根据自己的需要
分类二:
有返回值的函数:
函数调用结束后,会返回一个值给主调函数;
无返回值函数:
函数结束后,无返回值,一般定义为void类型,即
控类型
分类三:
有参函数:
参数可以任意多个
四.无参函数:
函数的基本定义:
DataType FunctionName()
{
//函数体
//可执行语句
}
注:函数名后面的括号不能省略!!!
函数的定义,函数的声明以及函数的调用:
有参函数的定义:
DataType Functionname(Type arg1,Type arg2)//(参数列表)
{
//函数体
}
注:
参数列表可以有多个,参数的类型可以任意(相对)
函数的声明:
DataType Functionname(参数列表);
注:
声明时,参数列表一定要和定义是的参数列表一致!!!
函数的调用:
FunctionName(value);
value:数值
注:
函数调用时,实参的类型,一定要和函数定义的形参列表一致!!!
函数调用可以再任何位置。
实参:
实际参数,即具体的数值
函数调用时的参数都是实参。
形参:
形式参数,形参的定义和普通变量定义无区别
注:函数名表示函数的入口地址
函数之间是等级价的,没有优先级问题,即平行关系。
形参在发生调用时,分配空间
在发生函数调用时,系统会默认将实参的值赋给形参。
3.函数的返回值
无返回值的类型函数类型为:void
DataType FunName(参数列表)
{
//函数体
}
DataType 决定了函数返回值的类型,
若是int,则返回值为int类型
若为double,则返回值为double类型。
如果函数的返回值能够在后面的程序中使用,则需要相同类型的变量接受返回值。
若是void类型的函数,则无返回值,return可有可恶。
若函数不是void类型,则必须要有return
return的作用
(1)函数遇到return,则结束后面的代码
(2)用于返回函数的执行结果
关键字
(1)变量分为全局变量和局部变量
全局变量:
在函数体之外定义的变量
其作用域是从变量定义出开始
局部变量:
在函数中定义
函数结束时,局部变量自动消亡,因此不同的函数中可以使用不同的变量名。
auto:
声明变量是动态变量,可以省略
动态全局变量
动态局部变量
生命周期:仅限于定义该变量的函数中
可以省略,如:
auto int a = 5;
static:
声明的变量为静态变量
作用域:
从定义处开始,
静态变量,若没有初始化则系统默认为0;
静态变量只初始化一次
静态全局变量
静态局部变量
静态函数:static修饰函数,此函数只能用于本文件,其他文件不可用。
extern:
声明为外部变量:extern int sum;
修饰函数:extern int test();
声明变量或函数在外部已经定义
register:
寄存器变量:变量直接存放在寄存器中
cpu寄存器个数有限,不可以定义多个寄存器变量
const:
常量,不可更改其值
const int num = 5;
int const num = 5
const int p;
int const p;
int const p;
const int const p;
函数的传参
值传递
地址传递
指针函数和函数指针
指针函数:
int ×test()
返回一个局部地址不允许,没意义
注意返回值问题,返回的是一个地址