</pre>c/c++中static的两种用法:<p></p><p><span style="white-space:pre"> </span>1).在固定的地址上进行存储分配,在<span style="color:#ff0000;">静态数据</span>区创建,而不是每次函数调用时在堆栈上创建,即静态存储;<span style="white-space:pre"> </span></p><p><span style="white-space:pre"> </span>2).对特定的编译单元是局部的,通过static控制名字的可见性,决定链接器能够看到哪些名字。</p><p></p><p>一、函数内部的静态变量</p><p></p><p>1.函数内部的静态变量:</p><p><span style="white-space:pre"> </span>对于函数体内的局部变量,编译器每次调用函数时,堆栈指针下移一个适当位置,为这些局部变量分配内存。如果变量有一个初始化表达式,每次程序运行到这里都会进行初始化。</p><p><span style="white-space:pre"> </span>当我们需要在两次函数调用之间保存一个变量的值,一种方法是通过定义一个全局变量来实现。但是这将导致该变量不仅仅只受这一个函数控制。c和c++都允许定义一个static对象,该对象存储在静态存储区,<span style="color:#ff0000;">而不是堆栈</span>。该对象在第一次调用函数的时候初始化一次,在两次调用期间保持它的值。如果没有为内建类型的静态变量提供一个初始值,编译器会在程序开始时它被初始化为0 。对一个静态对象的初始化(跟其他对象初始化一样)可以是任意的常量表达式。(常量表达式中可以出现常量以及在此之前声明过的变量和函数)。</p><p>2.函数内部的静态对象:</p><p><span style="white-space:pre"> </span>静态变量的规则同样适用于静态对象,它同样必须有初始化操作。可以用带参数的构造函数,也可以用默认构造函数。如果定义一个静态对象时没有指定构造函数参数,这个类必须要有默认构造函数。下面的代码中,在f()内定义了两个静态对象,x1带初始化参数, x2调用默认构造函数。程序第一次转到对象的定义时(且只有第一次时)执行构造函数。</p><p><pre name="code" class="cpp">#include<iostream></pre>c/c++中static的两种用法:<p></p><p>&