(1)静态局部变量只在编译时赋值,即只在编译时执行“static int a = 1 ” 这句代码一次,无论运行期间调用这句代码所在的函数多少次,前提是必须在定义的同时赋值;而自动局部变量,没调用一次就执行定义赋值一次。 如下代码: (2)使用静态存储要多占内存,降低程序可读性,不要过多使用。 (3)局部变量无声明(extern...
auto:自动存储类别,用于定义局部变量,表示变量在函数内部自动创建和销毁,初始值为随机值。static:静态存储类别,用于定义全局变量或局部变量,表示变量在程序运行期间一直存在,初始值为0或常量表达式。extern:外部存储类别,用于声明在其他文件中定义的全局变量,表示变量可以在多个文件中共享,初始值由定义时指定。reg...
(3)局部变量无声明(extern) 2.全局变量与存储类别的关系 (1)所有全局变量都是静态变量,都存在静态存储区。 (2)所有外部变量不加static修饰,都可以使用关键字extern来声明(格式为 extern(int可省略类型) a;),可以扩张其作用域从声明处开始,还可以跨源文件声明使用。 (3)在外部变量前面加static修饰符,可将外部...
static修饰局部变量改变了变量的生命周期,生命周期改变的本质是改变了变量的存储类型,本来一个局部变量是储存在内存的栈区的,但是被static修饰后存储到了静态区。存储在静态区的变量和全局变量是一样的,生命周期就和程序的生命周期就一样了,只有程序结束变量才能销毁,内存才能回收,但作用域是不变的。 4.extern extern...
用静态变量记录函数被调用的次数: 4. 寄存器变量(register): 书上说寄存器变量会尽量把变量放到寄存器(而不是栈或堆), 从而加快存取速度, 我试了一下, 效果一般般. 5. extern 关键字: 使用外部全局变量应该用 extern 重新声明一下; 如果不使用 extern, 将是重新定义; ...
全局变量指的是在函数以外定义的变量,其作用范围为从定义处开始到所在程序文件结束。编译阶段开始分配固定空间,程序运行期间始终占有该空间不变。整体来讲,全局变量和声明为static型的局部变量存储在内存的静态存储区;局部变量存储在内存的动态存储区。2、 extern的变量声明 我们知道,在函数外部定义的变量称为全局...
局部结构体: 跟变量一样,也分为局部和全局,先来看一下局部结构体: 则这只能在定义以下位置到函数结束之前进行使用,出了函数则就不可以了,另外如果定义在代码块中: 则只能在定义的位置至代码块结束的位置进行使用,这个规则跟变量是一样的。 另外结构体有可能在不同作用域中名称一样,如下: ...
1.extern可以用来声明一个全局变量,但是不能用来定义变量 2.默认情况下,一个全局变量是可以供多个源文件共享的,也就说,多个源文件中同名的全局变量都代表着同一个变量 3.如果在定义全局变量的时候加上static关键字,此时static的作用在于限制该全局变量的作用域,只能在定义该全局变量的文件中才能使用,跟其他源文件中...
extern是用来访问声明过的外部变量,比如在同一个文件夹中,两个程序要相互联系,要用到另一个程序的变量,在使用时前面加上extern,说明这是从其他程序拿来的变量, 这样就可以直接使用。但记得要在前面加上extern。就好像你向别人借东西,如果不说一声,就很没礼貌。你自己知道但别人不知道 ...
C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。 局部变量 局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。例如下面的伪代码: int f1(int a) { int b,c; /* a,b,c仅在函数f1()内有效 */ ...