1)全局对象、外部static对象 a)同一编译单元(同一源文件)中,按照对象/变量的定义顺序初始化。 b)不同编译单元,C++标准未保证初始化先后顺序,只保证都在main()之前初始化完成。 2)函数内部local static变量,在该函数调用过程中第一次遇到该static变量时初始化。 基于以上观点,大师们建议少用全局变量,全局变量之间要...
根据这一规则,我们容易知道,在任何花括号内的静态变量,都是局部静态变量(local static variable),其作用范围受到对应的花括号限制。有一类特殊的静态变量,它们的头顶上没有任何花括号了,而且也没有static关键字的限制,那么我们可以理解为,这类无人约束的变量,其作用范围就是整个工程啦——也就是我们所说的全局变量。
static int count = 10; // 事实上此赋值语句从来没有执行过 return count--; } int count = 1; int main(void) { printf("global\t\tlocal static\n"); for(; count <= 10; ++count) printf("%d\t\t%d\n", count, fun()); return 0; } 程序的运行结果是: global local static 1 10...
global local static 1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1 (3)static的第三个作用是默认初始化为0。其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以...
global local static 1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1 (3)static 的第三个作用是默认初始化为 0。 其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是 0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我...
global local static 1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1 3. static的第三个作用是默认初始化为0.其实全局变量也具备这一属性,因为全局变量也存储在静态数据区 在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一...
add前面Bind的值变成了LOCAL,这时候对外就不可见了。这也就是static在全局的时候,起的作用,将对应的变量,或者函数的可见范围,变成只对自身可见,对外不可见。 这个是为了降低重名的几率,也是防止自身的全局变量被外部访问,瞎修改的风险。 为了说明这个情况,我们来演示下这个过程,add.c改成这样: ...
首先,被static修饰之后,意味着只有 当前的C语言C文件 可以直接 引用访问它,但是并不代表外部的模块(除当前C文件外的其他C文件)就不能访问它。 直接访问肯定是不行的,但是 间接 的方式肯定是可以的。 它的方法就是如上图的代码片段那样,将static变量的地址,以指针的形式传出去给其他模块即可。
global local static 1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1 3. static的第三个作用是默认初始化为0.其实全局变量也具备这一属性,因为全局变量也存储在静态数据区 在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一...
global local static1 102 93 84 75 66 57 48 39 210 1 (3)static 的第三个作用是默认初始化为 0。 其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有...