基本概念: 作用域:起作用的区域,也就是可以工作的范围。

代码块:所谓代码块,就是用{}括起来的一段代码。

数据段:数据段存的是数,像全局变量就是存在数据段的

代码段:存的是程序代码,一般是只读的。

栈(stack):先进后出。C语言中局部变量就分配在栈中。

局部变量

  普通的局部变量定义的时候直接定义或者在前面加上auto

void func1(void)

{undefined

int i = 1;

i++;

printf("i = %d.n", i);

}

局部变量i的解析:

在连续三次调用func1中,每次调用时,在进入函数func1后都会创造一个新的变量i,

并且给它赋初值1,然后i++时加到2,

然后printf输出时输出2.然后func1本次调用结束,

结束时同时杀死本次创造的这个i。这就是局部变量i的整个生命周期。

下次再调用该函数func1时,又会重新创造一个i,经历整个程序运算,

最终在函数运行完退出时再次被杀死。

静态局部变量(static) 静态局部变量定义时前面加static关键字。

总结:

1、静态局部变量和普通局部变量不同。静态局部变量也是定义在函数内部的,静态局部变量定义时前面要加static关键字来标识,静态局部变量所在的函数在多调用多次时,只有第一次才经历变量定义和初始化,以后多次在调用时不再定义和初始化,而是维持之前上一次调用时执行后这个变量的值。本次接着来使用。

2、静态局部变量在第一次函数被调用时创造并初始化,但在函数退出时它不死亡,而是保持其值等待函数下一次被调用。下次调用时不再重新创造和初始化该变量,而是直接用上一次留下的值为基础来进行操作。

3、静态局部变量的这种特性,和全局变量非常类似。它们的相同点是都创造和初始化一次,以后调用时值保持上次的不变。不同点在于作用域不同

全局变量 定义在函数外面的变量,就叫全局变量。

普通全局变量 普通全局变量就是平时使用的,定义前不加任何修饰词。普通全局变量可以在各个文件中使 用,可以在项目内别的.c文件中被看到,所以要确保不能重名。

静态全局变量 静态全局变量就是用来解决重名问题的。静态全局变量定义时在定义前加static关键字, 告诉编译器这个变量只在当前本文件内使用,在别的文件中绝对不会使用。这样就不用担心重名问题。所以静态的全局变量就用在我定义这个全局变量并不是为了给别的文件使用,本来就是给我这个文件自己使用的。

跨文件引用全局变量(extern) 就是说,你在一个程序的多个.c源文件中,可以在一个.c文件中定义全局变量g_a,并且可以在别的另一个.c文件中引用该变量g_a(引用前要声明)

函数和全局变量在C语言中可以跨文件引用,也就是说他们的连接范围是全局的,具有文件连接属性,总之意思就是全局变量和函数是可以跨文件看到的(直接影响就是,我在a.c和b.c中各自定义了一个函数func,名字相同但是内容不同,编译报错。)。

局部变量和全局变量的对比:

1、定义同时没有初始化,则局部变量的值是随机的,而全局变量的值是默认为0.

2、使用范围上:全局变量具有文件作用域,而局部变量只有代码块作用域。

3、生命周期上:全局变量是在程序开始运行之前的初始化阶段就诞生,到整个程序结束退出的时候才死亡;而局部变量在进入局部变量所在的代码块时诞生,在该代码块退出的时候死亡。

4、变量分配位置:全局变量分配在数据段上,而局部变量分配在栈上。

c语言中全局变量多线程调用-局部变量、静态局部变量、全局变量与静态全局变量分析相关推荐

  1. C语言中函数的调用和函数返回值(17)

    C语言中函数的调用和函数返回值 一.函数的调用形式 按照函数调用出现的形式,可以分为三种调用方式: 1.函数调用语句 例如: printf_star(); 2.函数表达式 c=2*max(a,b); ...

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

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

  3. 多线程调用同一个方法,局部变量会共享吗

    对于一个局部变量应该是各线程独立的,一个线程不会改变另一个线程的临时变量. 多线程时, 几个线程间输出信息是交叉在一起的, 但你又没有区分是哪个线程输出的, 所以你自己就误认为是同一个线程输出的东西被 ...

  4. c语言中的多线程的实现

    一.多线程的概念及程序实现 1.什么是多线程? 线程:(LWP)线程是轻量级的进程,进程是资源分配的最小单位,线程是调度的最小单位.(同一个进程下)线程共用同一个进程的资源.多线程在切换的时候要比多进 ...

  5. c语言递归调用次数,C语言中的递归调用

    递归:这个词简直是大多数初学者的噩梦,当初学者在接触递归时,简直是一头雾水,很难理解,这是正常的,因为我们都不是天才,主要原因呢还是归功于不理解递归在底层到底发生了什么,而是只看表面,当然就很难明白递 ...

  6. 【多线程】c语言中的多线程

    线程 Thread:专业术语称之为程序执行流的最小单元 .线程是不会执行程序的,可以理解成线程就是一个载体,将 要执行的代码 运送到CPU进行处理. 多线程就是多个线程同时并发执行. 1. 为什么用多 ...

  7. C语言中的多线程简介

    线程 Thread 专业术语称之为程序执行流的最小单元 .线程是不会执行程序的,可以理解成线程就是一个载体,将 要执行的代码 运送到CPU进行处理. 多线程就是多个线程同时并发执行. (注意并发与并行 ...

  8. C 语言中的 strtok 调用小技巧

    1 #include <stdio.h> 2 #include <string.h> 3 4 char *my_strtok(char *buf, char *delims) ...

  9. c语言 函数调用 传值调用 引用调用 传地址调用,C语言中的传值调用和引用调用...

    在使用一个音频芯片时,需要用到这样一个功能,即对音量进行调节.在厂家提供的驱动里面没有这样的功能函数,因此需要自行添加.注意到厂家提供的驱动里面包含了一个写入命令的函数,void Vol_Cmd(ui ...

最新文章

  1. BSOJ 3899 -- 【CQOI2014】 数三角形
  2. Qt学习笔记之网络相关概念
  3. 生成两个表的笛卡尔积
  4. ORACLE 各种闪回操作
  5. 解析php混淆加密解密的手段,如 phpjm,phpdp神盾,php威盾
  6. python中的_init_的使用
  7. android webview圆角,Android 实现一个通用的圆角布局
  8. 微软:SolarWinds 供应链攻击事件幕后黑手攻击全球24国政府
  9. 深入理解ArrayList 和 LinkedList 区别
  10. 测试线程池(Java)
  11. Android 关于ZXing的使用
  12. c语言中尖括号的作用,C语言中,#include
  13. App Store打了这么多年,ASO优化还剩什么?
  14. 获取验证码以及验证验证码
  15. Web前端开发精品课HTML与CSS基础教程 (莫振杰著) 完整pdf扫描版
  16. 资源(电影、英剧、美剧、日剧、动漫、纪录片)网站
  17. 基于JAVA南京传媒学院门户网计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  18. Docker Desktop启动失败(Docker failed to initialize Docker Desktop is shutting down)
  19. HTML / CSS 实践练习
  20. CUDA流多处理器(stream multiprocessor,sm)和硬件流处理器(stream processor,sp)

热门文章

  1. 魅族mx1Android4.4,魅族MX 定制 Flyme-1.1.8 正式版固件(适用于香港)
  2. js在当前时间后或前添加或减少几个月
  3. html瀑布流元素布局宽度,css3多列属性实现瀑布流布局
  4. 怎么把ai从c盘移动到d盘_ai暂存盘怎么设置-AI设置暂存盘的教程 - 河东软件园
  5. 爬取微信好友详细信息
  6. 【转】光照、材质、纹理的关系
  7. 舍弃325亿估值公司CTO职位:写代码才最快乐
  8. SAP 维护SD价格的探讨
  9. 分享CFA学习笔记和资料!
  10. excel行列互换_3种转换excel行列位置的方法,再也不用傻傻的一个一个的复制粘贴...