一. 简介
前面几篇学习了 C语言中基础问题,文章如下:
本文继续学习 嵌入式C开发中,可能涉及的一些C语言基础问题。
二. 常见C语言基础说明三:static修饰的函数或变量
1. static修饰的函数或变量
对于内存,我们可以简单的理解为,内存分为三个部分,栈区、堆区和静态区。
栈区: 保存局部变量,栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。栈区的特点是效率高,但是空间有限。
堆区: 由malloc系列函数或new操作符分配内存。其生命周期由free或delete决定。在没有释放之前一直存在,直到程序结束。其特点是使用灵活,空间比较大,但是容易出错。
静态区: 保存全局变量和静态变量,静态区的内容在整个程序的生命周期内都存在,由编译系统在编译的时候分配。
在C语言中,static 是修饰变量和函数的。static 修饰局部变量称为静态局部变量,static 修饰全局变量称为静态全局变量,static 修饰函数称为静态函数。
静态函数:它们的作用域被限制在定义它们的源文件中,它们不能被其他文件中的函数调用。静态函数只能在定义它们的文件中使用。
使用static关键字声明的变量是静态变量,它们的作用域被限制在定义它们的源文件中,全局变量和被 static 修饰后的局部变量都在静态区
分配内存。
在一个函数中,由static 函数修饰的是局部静态变量,与普通局部变量不同,局部静态变量在函数调用结束之后不会被销毁,而是保存上一次执行后的值继续存在。
2. static修饰的变量
static修饰的局部变量:
#include <stdio.h>
int caculate(int a)
{
static int b = 5;
b = a*b;
return b;
}
int main(void)
{
int result = 0;
caculate(2);
result = caculate(3);
printf("%d\n", result);
return 0;
}
综上所述:
所以,caculate(2) 运行后,b的值为 10,而当运行 caculate(3) 后,b = 10*3 ,也就是 30。