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程序时,不会定义。


智能车图像处理9-进阶篇1--中线的提取 (1)10-50行 基础扫线 (2)56-71 断行0 ,就是比如遇到十字,十字路口下方 第一次断线的地方。 (3)83-124 按照原先有效行,拟线作为中值,然后从中值向左右扫线,同时计算赛道宽度。 (4)125-138 如果出现赛道宽度小于先前有效行,则找到二次扫线的起点,从二次扫线起点处,继续向下扫线,直至结束,同时记录最后的有效行。 (5) 310-- 最后计算左右边线类似于方差的值,用于环岛的判断 ***这里着重描述一下二次扫线,希望大家可以理解的深刻 阅读详情

相关推荐

南邮-软件设计实验(C++版)

南邮软件设计 A档 一、分数统计 课题内容:   设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。 课题要求: (1)输入某班级学生的姓名、分数; (2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。 示例代码: #include<bits/stdc++.h> using...

Dainelcw 1万+

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

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

杰儿__er 的博客 1万+

Fortify SCA 24.4 最新可用版

Fortify Static Code Analyzer(Fortify SCA) 是一款由 Micro Focus(原惠普旗下)开发的 静态应用安全测试(SAST)工具,专注于在软件开发早期通过分析源代码或编译后的二进制文件,识别潜在的安全漏洞、代码缺陷和合规性问题。以下是其核心特点与功能:核心功能 静态代码分析 在不运行程序的情况下,通过语法、语义分析检测代码中的安全漏洞(如 SQL 注入、跨站脚本(XSS)、缓冲区溢出等)和代码质量问题。

棉花糖的博客 3181

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

MTK Linux DRM分析(十一)- MTK KMS Panel显示屏驱动

面板扩展(Panel Extension)是指 MediaTek 在标准 DRM 面板驱动框架之上添加的定制化功能模块。

iTom1900 1683

Windows沙盒神器Sandboxie Plus保姆级教程:从安装到实战测试可疑软件

本文详细介绍了Windows沙盒神器Sandboxie Plus的安装、配置与实战应用,帮助用户安全测试可疑软件。从系统要求、安装步骤到核心功能如多沙盒管理、文件共享和快照恢复,全面解析了这款轻量级沙盒工具的优势与使用技巧,特别适合需要隔离运行未知程序的用户。

weixin_29323049的博客 1153

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

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

qq_44423388的博客 485

车辆横向控制MPC实战:从‘老王模型’到CasADi求解的保姆级避坑指南

本文详细解析了车辆横向控制MPC的实战应用,从经典动力学模型选择到CasADi求解器的优化配置,提供了一套完整的避坑指南。重点介绍了车辆动力学模型的验证要点、CasADi环境的高效配置技巧以及MPC问题建模的核心要素,帮助开发者快速实现稳健的横向控制方案。

weixin_42524499的博客 346

C语言之static关键字详解

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

weixin_62604754的博客 1万+

nRF52811墨水屏时钟DIY:从全刷到局刷的实战改造指南(附完整代码)

本文详细介绍了如何将基于nRF52811的墨水屏时钟从耗电的全屏刷新模式改造为高效的局部刷新模式。通过剖析全刷与局刷的原理差异,提供了从工程架构、驱动层适配到应用层逻辑重构的完整实战指南,并附上关键代码示例。改造后,设备功耗显著降低,续航大幅提升,同时解决了视觉闪烁问题,是DIY低功耗墨水屏应用的实用参考。

weixin_29194693的博客 351

task5:在本地搭建大模型(ollama 和 LM studio 对比),接入 openclaw

关于大模型,大家千万不要想着在本地部署,根本不可行,没有那个财力。另外大模型迭代快,不可能每周都在下载大模型。再次,还是国外的模型好用,国内的模型真的在 deepresearch 上就有很大问题,你们懂的。所以本篇文章,还是聚焦在探索层面+实操,并不会实战。

这里是 AI 食用指南,持续分享有用的AI 实操和应用! 1968

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

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

2302_76305195的博客 1万+

【AI大模型】核心基石:Transformer架构入门通俗完整解读

文章摘要: Transformer架构是AI大模型(如GPT、Llama等)的核心基石,彻底颠覆了传统RNN/LSTM的逐字计算模式,通过自注意力机制实现全局并行运算和长文本语义理解。本文用通俗语言拆解Transformer的核心模块:位置编码保留语序、多头注意力捕捉上下文关联、掩码机制确保生成逻辑、残差连接稳定训练,并搭配极简PyTorch代码演示Decoder架构的逐字生成过程。Transformer的并行性、可堆叠性和全局注意力优势,使其成为千亿参数大模型的基础。理解Transformer是掌握大模型

unber的博客 43

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

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

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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

gissinghxu的专栏 2246

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

zfjBIT的专栏 8870

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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、付费专栏及课程。

余额充值