- function
- 引子
- 函数的组成部分
- 自定义函数的声明,定义,调用
- 变量的作用域以及生命周期
- 从计组看函数调用
function
引子
什么是函数?
如你之前在数学所学,函数表示了变量之间的变换关系,是问题的主要解决方式。在编程语言中,函数是实现程序功能的主要载体。
在面向对象中也被称为方法
int main(void)
{
}
这是任何一段C语言程序都必须的main函数
- C语言程序运行的入口就是main函数。
- 任何一个C语言程序,有且仅有一个main函数(唯一入口)
- Arduino 框架下,main被包含进setup()中
函数的组成部分
- 函数类型
这个函数返回一个什么类型的变量
void(无返回值),int,float,int*....
函数最多只有一个返回值,多变量修改需要使用指针
- 函数名称
- 函数参数
函数传入什么类型的变量
自定义函数的声明,定义,调用
代码示例
#include <stdio.h> //头文件引用
#define PI 3.1415 //宏定义int global_variables; //全局变量
int global_a = 0;int add(int a ,int b); //函数声明int main(void)
{int local_variables = 1 ; //局部变量static int static_L_V; //局部静态变量int* p =(int *)malloc(10 * sizeof(int)); //动态内存管理free(p);int a=b=1,c;c=add(a,b); //函数调用print(c);
}int add(int a ,int b)
{//函数定义return a+b ;
}
变量的作用域以及生命周期
|
全局变量 |
局部变量 |
静态变量 |
全局变量就是静态的 |
函数作用域内static声明 |
动态变量 |
涉及动态内存分配 |
|
全局变量
- 存储在堆内存,程序运行时候分配内存,程序结束内存释放,作用域为整个程序
- 在所有函数外声明,任何函数可以调用
- 太多会影响程序的可移植性(参考c++命名空间)
变量类型 |
作用域 |
生命周期 |
全局变量 |
整个程序 |
整个程序 |
局部变量
- 存储在栈内存,函数调用,内存分配,函数结束,内存释放,作用域为该函数
- 在函数内部声明,仅供该函数调用。
- 可以与全局变量重名,重名后对该变量的任何操作是对局部变量的操作
变量类型 |
作用域 |
生命周期 |
局部变量 |
该函数 |
该函数 |
局部静态变量
- 声明时候使用static关键字
- 在函数内部声明,仅供该函数调用
- 函数结束不释放,意味着该值保存供函数下次调用时候使用
变量类型 |
作用域 |
生命周期 |
局部静态变量 |
该函数 |
整个程序 |
从计组看函数调用