(1) 按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。 (2) 按作用域分, 全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的...
动态局部变量初始化成0xcccccccc,把所有动态堆变量初始化成0xcdcdcdcd。很多新手会忘记初始化这些 本来应该初始化的变量(尤其是new出来的变量),有时他们会假定这些变量应该是0,这样就可能出现在 release版正常而debug版不正常的程序,因为release版至少局部变量的初始值很可能就是0,而有时他们 又会假定或者期望这些变量...
在C语言中,局部变量和全局变量的初始化规则是不同的。全局变量和静态变量在程序开始时会自动初始化为零,但局部变量不会自动初始化。这是因为C语言设计哲学强调效率和性能,自动初始化局部变量会增加额外的运行时开销。因此,C语言将初始化的责任交给了程序员。然而,程序员在编写代码时可能会因为疏忽或误解而忘记初...
(2)全局变量在定义时不初始化则初始值是0,局部变量在定义时不初始化则初始值是不确定的。 所以,局部变量在使用之前一定要先赋值,如果基于一个不确定的值做后续计算肯定会引入Bug。 (3)关于形参和实参 记住这条基本原理:形参相当于函数中定义的变量,调用函数传递参数的过程相当于定义形参变量并且用实参的值来初始...
(1)在修饰变量的时候,static 修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。 (2)static 修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是 extern 外部声明也不可以。 (3)static 修饰一个函数,则这个函数的只能在本文件中调用,不能...
(1)生命周期:在修饰变量的时候,static修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放,但不改变作用域。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用static修饰。 (2)可见性:static修饰全局变量或函数时,这个全局变量只能在本文件中访...
static int n = 0; //定义一个静态全局变量n,并且初始化为0,其作用域是整个文件,也就是对函数Func和main均可用 int m = 0; //定义一个普通全局变量m,并且初始化为0,其作用域是整个文件 void Func() { int n; //定义一个整形变量的普通局部变量n,其作用域是函数Func()内部 ...
C语言当中变量的存储类型总共分为四类:分别为自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)。 auto:函数中所有的非静态局部变量都属于自动变量。 static:在变量前加上 static 关键字的变量。 extern:把全局变量在其他源文件中声明成 extern 变量,可以扩展该全局变量的作用域至声明的那...
(1)在修饰变量的时候,static 修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。 (2)static 修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是 extern 外部声明也不可以。 (3)static 修饰一个函数,则这个函数的只能在本文件中调用,不能...
也就是说,在函数内部使用的是局部变量,而不是全局变量。变量的使用遵循就近原则,如果在当前的局部作用域中找到了同名变量,就不会再去更大的全局作用域中查找。另外,只能从小的作用域向大的作用域中去寻找变量,而不能反过来,使用更小的作用域中的变量。下面我们通过一个具体的例子来说明:#include<stdio.h>...