一. 全局变量
全局变量是在所有函数体的外部定义的,程序的所有部分(其他文件的代码)都可以使用。全局变量不受作用域的影响。全局变量的生命周期一直到程序的结束,全局变量是静态存储方式。

例:

#include <stdio.h>
#include <stdlib.h>

/* a 就是一个全局变量*/
int a = 2;

int main(int argc, char *argv[]) {
printf(“int 存储大小 : %d \n”, a);
return 0;
}
如果在一个文件中使用extern关键字来声明另一个文件中存在的全局变量,那么这个文件可以使用这个变量。

例:

在a.c中定义一个全局变量

#include <stdio.h>
#include <stdlib.h>

int a = 3;/定义在a.c文件中的全局变量a/
在main.c中使用extern关键字引用a.c中的全局变量a

#include <stdio.h>
#include <stdlib.h>

/* 使用extern管金子引用a.c中的全局变量a*/
extern int a;

int main(int argc, char *argv[]) {
printf(“int 存储大小 : %d \n”, a);
return 0;
}
二.局部变量
局部变量出现在一个作用域内,它们是局限于一个函数的。局部变量经常被称为自动变量,因为它们在进入作用域时,自动生成,离开作用域时自动消失。关键字auto可以显示的说明这个问题,但局部变量默认为auto,所以没必要声明为auto。通常函数里定义的变量,函数的参数都局部变量。所以一般需要在某个函数里,返回数组的地址或者指针之类,这时候必须定义成static,或者动态申请内存,这样函数结束返回时才不会释放掉那块内存空间。

寄存器变量也是一种局部变量。register来修饰,就是告诉编译器尽可能快的访问这个变量,通过存放在寄存器中来实现快速访问。

三.静态变量
静态变量的修饰关键字是static,static可以作用于变量以及函数。由static修饰的,可分为静态局部变量,静态全局变量,静态函数。静态变量的生命期和程序生命期是一样的,在程序结束之后操作系统会回收空间。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量

1.静态局部变量

在局部变量前面加上static后,就定义了静态局部变量,静态局部变量属于静态存储方式,静态局部变量只会被初始化一次,下次使用依据上一次保存的值。它具有以下特点:
(1) 静态局部变量在函数内定义 ,它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。(作用域不变,生存周期变了)

(2) 允许对构造类静态局部量赋初值 ,例如数组,若未赋以初值,则由系统自动赋以0值。(而非静态局部变量未赋初始值,系统会给个随机值)
(3) 对基本类型的静态局部变量,若在说明时未赋以初值,则系统自动赋予0值。而对自动变量没有赋初值,则其值是随机值。

静态局部变量是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了上次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

2.静态全局变量

全局变量(外部变量)的说明之前再加static 就构成了静态全局变量。static全局变量只初使化一次,防止在其他文件单元中被引用。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

四.常量
常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。

常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。

常量就像是常规的变量,只不过常量的值在定义后不能进行修改。

定义常量
在 C 中,有两种简单的定义常量的方式:

使用 #define 预处理器。
使用 const 关键字。
#define 例子:

#include <stdio.h>

#define LENGTH 10
#define WIDTH 5
#define NEWLINE ‘\n’

int main()
{

int area;

area = LENGTH * WIDTH;
printf(“value of area : %d”, area);
printf("%c", NEWLINE);

return 0;
}

const 例子:

#include <stdio.h>

int main()
{
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = ‘\n’;
int area;

area = LENGTH * WIDTH;
printf(“value of area : %d”, area);
printf("%c", NEWLINE);

return 0;
}

  1. `/*接下来对静态局部变量的理解
    【程序41】题目:学习static定义静态变量的用法  
    static有两种用法:面向过程程序设计中的static
    面向对象程序设计中的static
    这里的是:面向过程
    静态全局变量:在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。
    静态局部变量:在局部变量前,加上关键字static,该变量就被定义成为一个静态局部变量。
    静态函数:在函数的返回类型前加上static关键字,函数即被定义为静态函数。
    静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。
    */

#include <stdio.h>

void fun()
{
int var = 0;
static int static_var = 0; //静态局部变量
printf(" var equal %d\n",var);
printf(" static var equal %d\n",static_var);
printf("\n");
var++;
static_var++;
}
int main()
{
int i;
for(i = 0;i < 3;i++)
{
fun();
}
return 0;
}
`

关于静态局部全局变量相关推荐

  1. c 全局变量多线程调用_c语言局部变量 静态局部变量 全局变量与静态全局变量...

    基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  2. 【C语言局部变量/静态局部变量/全局变量与静态全局变量

    1基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  3. c语言局部变量 静态局部变量 全局变量与静态全局变量

    基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  4. Cpp 对象模型探索 / 静态局部对象只构造一次的原因和执行析构的方法

    代码 class A { public:A() {}~A() {} };void func() {static A a; }int main() {func();return 0; } 问题 1.函数 ...

  5. python定义静态变量_对Pyhon实现静态变量全局变量的方法详解

    python不能像C++一样直接定义一个static变量或者通过extern来导入别的库的变量而实现数据共享,但是python的思想是通过模块化来解决这个问题,就是通过模块来实现全局变量. 首先新建一 ...

  6. php局部全局变量,PHP局部变量与全局变量

    一.局部变量 定义:在函数内部声明,且只能在函数内部调用的变量. 注意:参数也是局部变量的一种. demo1: 1 function demo1(){ 2     $age = 10; 3 } 4 5 ...

  7. 头文件定义全局变量_5.2 C++局部变量与全局变量 | 输出局部全局变量

    C++局部变量 C++局部变量是指:在一个函数内部定义的变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它,在此函数以外是不能使用这些变量的. 同样,在复合语句中定义的变量只在本复合语句范 ...

  8. C/C++开发工程师面试题整理(一)——C语言关键字、预处理、静态变量全局变量、函数等

    整理一些找工作问到的题型和答案,加油吧,小菜鸡.不会的很多,感谢各位面试官的提问和解释,让我获益匪浅. 一.C语言关键字 1.关键字static的作用是什么(中兴面试题2020) 答:1.static ...

  9. pAdPt_-9 活动的生命周期[LogCat java关键字] 传递数据[Intent 静态变量 全局变量 剪切板]

    2015.11.13-11.17 平台. Windows 10 Android Studio 1.3.2 看"Android.老罗"的笔记以为Android开发入门的好瓜笔记,笔记 ...

最新文章

  1. 面部表情视频中进行远程心率测量:ICCV2019论文解析
  2. 求链表倒数第k个结点
  3. 梯度提升树(GBDT)原理小结
  4. java的hr样式,spring+spring mvc+mybatis开发java医院HR人事管理系统(加强版本+ shiro)...
  5. Java如何读指定行
  6. 关于锁表查询的部分SQL
  7. STL常见算法transform以及二分查找,以及lambda表达式
  8. PHP 02 PHP的基础语法
  9. 7-模块开发卷宗(GB8567——88)
  10. 【ant项目构建学习点滴】--(3)打包及运行jar文件
  11. 阅读underscore源码笔记
  12. 普林斯顿微积分读本第一章--函数、反函数
  13. 微信小程序----实现YDUI的ScrollTab(滚动选项卡)
  14. 网易严选App感受WEEX 开发
  15. 如何实现Spark SQL 字段血缘?
  16. Sutton and Barto 教材中多臂老虎机(k-armed bandit testbed)模拟
  17. 无人驾驶汽车系统入门(十五)——ROS入门与实践(2)
  18. 内核中的gfp_t类型
  19. java词云生成Kumo
  20. 虚拟机设置共享文件夹不显示

热门文章

  1. hbase实践之写流程拾遗
  2. Python3 Selenium自动化web测试 == 第三节 常用WebDriver API使用示例上(24个API)
  3. IIS7.0 部署wcf 404或者配置MIME(转)
  4. 用python的matplotlib画标准正态曲线
  5. IBM JDK,SUN JDK,BEA JDK区别在哪里?
  6. 使用tensorflow serving部署keras模型(tensorflow 2.0.0)
  7. matplotlib 一张图多个图,如何在Matplotlib中绘制同一个图上的多个函数?
  8. tensorflow 报错(完善中)
  9. linux deepin ubuntu apt安装openjdk-8-jdk
  10. sts(eclipse)安装svn插件