c语言中的全局变量,局部变量,static,extern

闪烁应用程序窗体,不用timer控件,C#源代码[DllImport("User32")] public static extern bool FlashWindow(IntPtr hWnd, bool bInvert); try 闪烁应用程序窗体,不用timer控件,C#源代码[DllImport("User32")] public static extern bool FlashWindow(IntPtr hWnd, bool bInvert); try { int MyTimes = 50; int MyTime = 50; for (int MyCount = 0; MyCount < MyTimes; MyCount++) { FlashWindow(this.Handle, true); System.Threading.Thread.Sleep(MyTime); } } catch (Exception MyEx) { System.Windows.Forms.MessageBox.Show(MyEx.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } VisualStudio2008创建 立即下载

变量可以在程序中三个地方说明: 函数内部、函数的参数定义中或所有的函数外部。根据所定义位置的不同, 变量可分为局部变量、形式参数和全程变量。从空间角度来看,变量可以分为全局变量和局部变量,而从时间角度来分的 可以有静态存储变量和动态存储变量之分。

 

一。全局变量和局部变量

1。局部变量

他是 指在函数内部定义的变量 作用域为定义局部变量的函数 也就是说他只能在定义他的函数中使用

最值得注意的是 只有在程序执行到定义他的模块时才能生成,一旦执行退出该模块则起变量消失

2。全局变量

在程序执行的过程中一直有效

 

对于全局变量 如果在定义的时候不做初始化 则系统将自动为起赋值 数值型为0,字符型为空'\0'

全局变量的弊端 增加内存开销 降低函数的通用性

 

定义全局变量时 理想的位置是在文件的开头 当这些函数以及同一个程序中的其他源程序文件中的某些函数需要使用该全局变量时 在函数内部对该变量使用extern 加以说明 说明他是外部的。

 

还要说明的是 对外部变量的说明和对全局变量的定义不是一回事

对外部变量的说明 只是声明该变量是在外部定义过的一个全局变量 在这里引用 而对全局变量的定义则是要对起分配存储单元的

一个全局变量只能定义一次 可是却可以多次引用

*** 在同一源文件中,全局变量和局部变量同名时,在局部变量的作用域内,全局变量不起作用的。

 

二。静态存储变量和动态存储变量

对于程序运行期间根据需要进行临时动态分配存储空间的变量 为动态存储变量

对于那些程序运行期间永久占用固定内存的变量 称为静态存储变量


还要说明的是 程序的指令代码是存放在程序代码区的 静态存储变量是存放在静态数据区的 包括全局变量等 而程序中的动态存储变量存放在动态数据区 如函数的形参以及函数调用时的返回地址等

 

三。C语言中的变量存储分类指定
    
     auto 
     auto称为自动变量 如果函数不做其他说明的话 均为自动变量


     static 
     static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。 
     1. 静态局部变量

      它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。

     2. 静态全程变量

      Turbo C2.0允许将大型程序分成若干独立模块文件分别编译, 然后将所有模块的目标文件连接在一起, 从而提高编译速度, 同时也便于软件的管理和维护。静态全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与全程变量的区别是: 全程变量可以再说明为外部变量(extern), 被其它源文件使用, 而静态全程变量却不能再被说明为外部的, 即只能被所在的源文件使用。 

     extern 
     extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外, 还要被其它文件使用。因此,    必须将全程变量通知每一个程序模块文件,    此时可用extern来说明。

 

     register 
     register称为寄存器变量。它只能用于整型和字符型变量。定义符register说明的变量被Turbo C2.0存储在CPU的寄存器中,   而不是象普通的变量那样存储在内存中, 这样可以提高运算速度。但是Turbo C2.0只允许同时定义两个寄存器变量,一旦超过两个, 编译程序会自动地将超过限制数目的寄存器变量当作非寄存器变量来处理。因此, 寄存器变量常用在同一变量名频繁出现的地方。 
     另外, 寄存器变量只适用于局部变量和函数的形式参数, 它属于auto型变量, 因此, 不能用作全程变量。定义一个整型寄存器变量可写成: 
       register int a;


static关键字是C,C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).

(1)局部静态变量

(2)外部静态变量/函数

(3)静态数据成员/成员函数

下面就这三种使用方式及注意事项分别说明

 

一、局部静态变量

在C/C++中, 局部变量按照存储形式可分为三种auto, static, register

(<C语言程序设计(第二版)>谭浩强,第174-175页)

与auto类型(普通)局部变量相比, static局部变量有三点不同

1. 存储空间分配不同

auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放, 而static分配在静态存储区, 在程序整个运行期间都不释放. 两者之间的作用域相同, 但生存期不同.

2. static局部变量在所处模块在初次运行时进行初始化工作, 且只操作一次

3. 对于局部静态变量, 如果不赋初值, 编译期会自动赋初值0或空字符, 而auto类型的初值是不确定的. (对于C++中的class对象例外,class的对象实例如果不初始化, 则会自动调用默认构造函数, 不管是否是static类型)

 

特点: static局部变量的”记忆性”与生存期的”全局性”

所谓”记忆性”是指在两次函数调用时, 在第二次调用进入时, 能保持第一次调用退出时的值.

示例程序一

#include<iostream>

 

using namespace std;

 

void staticLocalVar()

{

 static int a = 0; // 运行期时初始化一次, 下次再调用时, 不进行初始化工作

 cout<<"a="<<a<<endl;

 ++a;

}

 

int main()

{

 staticLocalVar(); // 第一次调用,输出a=0

 staticLocalVar(); // 第二次调用,记忆了第一次退出时的值, 输出a=1

 return 0;

}

 

应用:

 利用”记忆性”, 记录函数调用的次数(示例程序一)

   利用生存期的”全局性”, 改善”returna pointer / reference to a local object”的问题. Local object的问题在于退出函数, 生存期即结束,. 利用static的作用,延长变量的生存期.

示例程序二:

// IP address to stringformat

// Used in EthernetFrame and IP Header analysis

const char *IpToStr(UINT32 IpAddr)

{

 static char strBuff[16]; // static局部变量,用于返回地址有效

 const unsigned char *pChIP = (const unsignedchar *)&IpAddr;

 sprintf(strBuff, "%u.%u.%u.%u",  pChIP[0], pChIP[1], pChIP[2], pChIP[3]);

 return strBuff;

}

 

void fun(int i)

 

{

  static int value=i++;

  cout << value << endl;

}

int main()

 

{

  fun(0);

  fun(1);

  fun(2);

 

  return 0;

}

 

输出 000

 

 

你知道是为什么!

 

 

注意事项:

1. “记忆性”,程序运行很重要的一点就是可重复性, 而static变量的”记忆性”破坏了这种可重复性, 造成不同时刻至运行的结果可能不同.

2. “生存期”全局性和唯一性. 普通的local变量的存储空间分配在stack上, 因此每次调用函数时, 分配的空间都可能不一样, 而static具有全局唯一性的特点, 每次调用时,都指向同一块内存, 这就造成一个很重要的问题 ---- 不可重入性!!!

这样在多线程程序设计或递归程序设计中, 要特别注意这个问题.

(不可重入性的例子可以参见<effective C++ (2nd)>(影印版)第103-105页)

下面针对示例程序二, 分析在多线程情况下的不安全性.(为方便描述, 标上行号)

① const char * IpToStr(UINT32 IpAddr)

② {

③  static charstrBuff[16]; // static局部变量, 用于返回地址有效

④  const unsigned char*pChIP = (const unsigned char *)&IpAddr;

⑤  sprintf(strBuff,"%u.%u.%u.%u",  pChIP[0],pChIP[1], pChIP[2], pChIP[3]);

⑥  return strBuff;

⑦ }

假设现在有两个线程A,B运行期间都需要调用IpToStr()函数, 将32位的IP地址转换成点分10进制的字符串形式. 现A先获得执行机会, 执行IpToStr(), 传入的参数是0x0B090A0A,顺序执行完应该返回的指针存储区内容是:”10.10.9.11”, 现执行到⑥时, 失去执行权, 调度到B线程执行, B线程传入的参数是0xA8A8A8C0, 执行至⑦, 静态存储区的内容是192.168.168.168. 当再调度到A执行时,从⑥继续执行, 由于strBuff的全局唯一性, 内容已经被B线程冲掉,此时返回的将是192.168.168.168字符串, 不再是10.10.9.11字符串.

 

二、外部静态变量/函数

在C中static有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。, 但为了限制全局变量/函数的作用域, 函数或变量前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。注意此时, 对于外部(全局)变量, 不论是否有static限制, 它的存储区域都是在静态存储区, 生存期都是全局的. 此时的static只是起作用域限制作用, 限定作用域在本模块(文件)内部.

使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

示例程序三:

 

//file1.cpp

 

static int varA;

int varB;

extern void funA()

{

……

}

 

static void funB()

{

……

}

 

//file2.cpp

 

extern int varB; // 使用file1.cpp中定义的全局变量

extern int varA; // 错误!varA是static类型, 无法在其他文件中使用

extern vod funA(); // 使用file1.cpp中定义的函数

extern void funB(); // 错误! 无法使用file1.cpp文件中static函数

三、静态数据成员/成员函数(C++特有)

C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数. 这是与普通成员函数的最大区别, 也是其应用所在, 比如在对某一个类的对象进行计数时, 计数生成多少个类的实例, 就可以用到静态数据成员. 在这里面, static既不是限定作用域的, 也不是扩展生存期的作用, 而是指示变量/函数在此类中的唯一性. 这也是”属于一个类而不是属于此类的任何特定对象的变量和函数”的含义. 因为它是对整个类来说是唯一的, 因此不可能属于某一个实例对象的. (针对静态数据成员而言, 成员函数不管是否是static, 在内存中只有一个副本, 普通成员函数调用时, 需要传入this指针, static成员函数调用时, 没有this指针. )

请看示例程序四(<effective c++ (2nd)>(影印版)第59页)

class EnemyTarget {

public:

  EnemyTarget() { ++numTargets; }

  EnemyTarget(const EnemyTarget&) {++numTargets; }

  ~EnemyTarget() { --numTargets; }

  static size_t numberOfTargets() { returnnumTargets; }

  bool destroy();   // returns success of attempt to destroyEnemyTarget object

private:

  static size_t numTargets;               // object counter

};

// class statics mustbe defined outside the class;

// initialization is to0 by default

size_tEnemyTarget::numTargets;

 

在这个例子中, 静态数据成员numTargets就是用来计数产生的对象个数的.

另外, 在设计类的多线程操作时, 由于POSIX库下的线程函数pthread_create()要求是全局的,普通成员函数无法直接做为线程函数, 可以考虑用Static成员函数做线程函数.

 

其实正如前面我引用的一篇文章中说的那样,static有两个作用:

 

1.限制变量和函数的作用域;

 

2.限制变量的存储域。

 

  extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。

另外,extern也可用来进行链接指定。

 

  在一个源文件里定义了一个数组:char a[6];

  在另外一个文件里用下列语句进行了声明:extern char *a;

  请问,这样可以吗?

  答案与分析:

  1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。

  2)、例子分析如下,如果a[] = "abcd",则外部变量a=0x12345678 (数组的起始地址),而*a是重新定义了一个指针变量a的地址可能是0x87654321,直接使用*a是错误的.

  3)、这提示我们,在使用extern时候要严格对应声明时的格式,在实际编程中,这样的错误屡见不鲜。

  4)、extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。

 

函数

  extern 函数1

  常常见extern放在函数的前面成为函数声明的一部分,那么,C语言的关键字extern在函数的声明中起什么作用?

  答案与分析:

  如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:

  extern int f(); 和int f();

  当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,我比较习惯在所有的函数声明前添加extern修饰。

  extern 函数2

  当函数提供方单方面修改函数原型时,如果使用方不知情继续沿用原来的extern申明,这样编译时编译器不会报错。但是在运行过程中,因为少了或者多了输入参数,往往会照成系统错误,这种情况应该如何解决?

  答案与分析:

  目前业界针对这种情况的处理没有一个很完美的方案,通常的做法是提供方在自己的xxx_pub.h中提供对外部接口的声明,然后调用方include该头文件,从而省去extern这一步。以避免这种错误。

  宝剑有双锋,对extern的应用,不同的场合应该选择不同的做法。

  extern “C”

  在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?

  答案与分析:

  C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。

  下面是一个标准的写法:

  //在.h文件的头上

  #ifdef __cplusplus

  #if __cplusplus

  extern "C"{

  #endif

  #endif /* __cplusplus */

  …

  …

  //.h文件结束的地方

  #ifdef __cplusplus

  #if __cplusplus

  }

  #endif

#endif /* __cplusplus */

__cplusplus标示符用来判断程序是用c还是c++编译程序编译的。当编译c++程序时,这个标示符会被定义,编译c程序时,不会定义。


Unity 编辑器篇|(四)编辑器拓展GUI类 (全面总结 | 建议收藏) GUI 类是 Unity GUI 的接口,并且具有手动定位功能。“即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI 函数即时模式 GUI 系统常用于:创建游戏内调试显示和工具。为脚本组件创建自定义检视面板。创建新的编辑器窗口和工具以扩展 Unity 本身。 阅读详情

相关推荐

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 195

对C语言 static作用——修饰 变量(全局变量/局部变量)、函数

*******************************概念***************************************************************************************************************************首先得明白全局变量、静态全局变量、局部变量、静态局部变量的概念,下面进行举例://mai...

杰儿__er 的博客 1万+

PIC单片机应用开发实践教程(二): 新建工程

File---New ProjectMicrochip Embedded --- Standalone Project 选择所用MCU对应型号 点击 Finish 后,工程就建好了 至止,我们的一个新工程就建完成了!

qq_57798018的博客 2888

C语言——static、extern关键字,bool类型,空语句

1、static 静态成员 作用:a.使局部变量“延寿” #include<stdio.h> void fun1(int x) { int a = x; int b = 0; a++; b++; printf("a = %d,b = %d\n",a,b); } void fun2(int x) { static int a = x; int b = 0; a++; b++; printf("a = %d,b ...

Clear_tj的博客 3574

[特殊字符]交通标志检测与分类数据集-智能驾驶系统 地图数据更新 1,886张图片

🚦交通标志检测与分类数据集-智能驾驶系统 地图数据更新 1,886张图片

cver123的博客 2075

银行会计第2课:交易和核算分离的思想

核算作为会计的基础,将交易转化为可量化的信息,而会计则通过整合核算结果,实现对经济活动的全面把控。- 本质:指企业或主体之间发生的、能引起经济利益变动的具体事项,比如采购商品、销售货物、支付工资等,是客观发生的经济事实。可售产品(业务视角的核算对象) + 属性条件(核算的分类,限制等) = 核算类型(会计视角,含有科目分类内容)- 核算:会计人员根据采购发票、入库单等,将这笔交易记为“借:原材料,贷:银行存款”(对事实的会计处理)。- 特点:是核算的源头,不涉及会计处理,仅代表经济行为的发生。

ademen的博客 497

static、extern,const关键字,关于指针和bool类型的小知识

static关键字修饰的全局变量其可见性发生改变,作用域和生存期不变,只在本文件中使用,static修饰的函数也是只能在本文件中使用。 extern是外部关键字,作用于全局变量或者是函数。

qq_44423388的博客 485

新手避坑指南:HT7036计量芯片SPI读取电压的完整流程(从复位到校准)

本文详细介绍了HT7036计量芯片的SPI读取电压完整流程,从硬件准备到校准设置,重点解析了复位引脚处理、SPI通信配置、芯片初始化及数据处理等关键步骤。针对常见问题如晶振焊接、SPI时序错误等提供实用解决方案,帮助开发者高效完成电压测量与校准。

weixin_30070339的博客 326

C语言之static关键字详解

static,英文意思静态的,作为C语言常用关键字中一个很重要的关键字,其用法多样且比较难以理解,本篇博客将带你详细了解掌握关键词static的用法......

weixin_62604754的博客 1万+

量子密钥分发系统设计与实现(一):系统基本架构讨论

本文主要对量子密钥分发系统中的基础架构和基于系统的量子密钥协商过程进行了初步讨论,为后期系列文章进行铺垫。

量子领域相关话题 3891

科技英语/专业英语——改错总结【2】

1.固定句式 make it + adj + 句子 例:These features make the electronic systems difficult to intercept this kind of signal. 正确形式:These features make it  difficult for the electronic systems  to intercept

MISAYAONE的博客 1731

【C语言】关键字static——static修饰局部变量、全局变量和函数详解!

static修饰局部变量、全局变量、函数,详解!

2302_76305195的博客 1万+

R数据分析:广义估计方程式GEE的做法和解释

好久没有更新文章了,因为同学们咨询的问题有点多,另一个原因就是自己实在太懒。。。。 今天继续给大家写广义估计方程式GEE。 In statistics, a generalized estimating equation (GEE) is used to estimate the parameters of a generalized linear model with a possible unknown correlation between outcomes. 上面的英文解释告诉我们,当我们

Codewar的博客 1万+

C语言中关键字:static 和 extern和全局变量和局部变量的讲解

static 和 extern 都是C语言中的关键字。

持续给大家分享博主在编程中学到的东西,请大佬们多多支持 694

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

黑马程序员——C语言之全局变量和局部变量以及static和extern修饰符的作用

概述:本小结着重讲解 1.全局变量和局部变量的差别      2.加上static 、 extern后分别对全局变量、局部变量、函数的影响。 变量的作用域小结: 变量的作用域可分为全局变量和局部变量 1.全局变量 a.定义:在函数外面定义的变量。 b.作用范围:从变量定义哪一行开始,到本文件的结尾。 c.生命周期:从变量定义哪一行开始得到分配的存储空间,直到程序运行结束了,

gissinghxu的专栏 2246

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域。变量说明的方式不同,其作...

zfjBIT的专栏 8870

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C语言四种存储类型详解( extern auto static register)及全局变量和局部变量

extern auto static register extern 外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。 如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。 如果同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。 3.如果写在文件的开头,可以省略extern。 ...

Amy的博客 1595

C语言中的全局变量,局部变量,include,extern, static, volatile详解

对Include的理解就是它会把头文件中的内容全部复制到使用include的地方,我们知道,在使用一个函数之前,必须要对其声明,不一定需要赋值。函数也是这样,头文件中只是声明。这是我对C语言语法系列的一些博客收集,现整理起来。建议花20分钟阅读,大有收获。这篇文章从底层讲了 voltaile的由来,很不错。首先是变量(全局变量,局部变量)的分类。了解了这些就再看看include的解析。voltaile的用法。

payphone15423的博客 935

C语言中的作用域与储存期(包含局部变量、全局变量、auto、register、static、extern)

深刻讲解C语言中作用域与储存期的相关知识,包含了局部变量、全局变量、auto、register、static、rxtern等内容的知识点。

2302_81805546的博客 1991

C语言关键字static与extern的详细解释

参考原文地址(static):https://blog.youkuaiyun.com/keyeagle/article/details/6708077 参考原文地址(extern):https://www.cnblogs.com/Lunais/p/5991135.html C语言中的static与extern是C语言32个关键字中的比较重要的两个内容,也是我近期在学习C++过程中理解较为晦涩的部分,为此,...

zhongshengxuexi_的博客 7765

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域也不同。C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。 1.1局部变量 局部变量也称为内部变

weixin_51824417的博客 2171

C中变量的存储方式以及extern与static对变量和函数的用法

C语言中局部变量、全局变量的存储方式,extern对局部变量、函数的三种用法,static对局部变量、全局变量、函数的三种用法!

ZGX_2005的博客 7392

static 和 extern详解

static 和 extern 都是C语⾔中的关键字。• 修饰局部变量• 修饰全局变量• 修饰函数extern 是⽤来声明外部符号的。作⽤域和⽣命周期。作⽤域(scope)是程序设计概念,通常来说,⼀段程序代码中所⽤到的名字并不总是有效(可⽤) 的,⽽限定这个名字的可⽤性的代码范围就是这个名字的作⽤域。1. 局部变量的作⽤域是变量所在的局部范围。2. 全局变量的作⽤域是整个⼯程(项⽬)。⽣命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。

2302_80200271的博客 982

(笔记)c中的四种存储类:auto,register,static,extern

C 存储类 存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C 程序中可用的存储类: auto register static extern auto 存储类 auto 存储类是所有局部变量默认的存储类。 { int mount; auto int month; } 上面的实例定义了两个带有相同存储类的变量,...

7TribeZ的博客 1856

黑马程序员——c语言的全局变量和局部变量,static和extern,预处理指令

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、全局变量和局部变量 根据变量的作用域,可以分为:局部变量、全局变量  1.局部变量:  1> 定义:在函数(代码块)内部定义的变量(包括函数的形参)  2> 作用域:从定义变量的那一行开始,一直到代码块结束  3> 生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,

jerome3的专栏 880
上一篇: c程序设计语言笔记4
zhanghui310
博客等级 码龄18年 2粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值