关于C语言基础知识

2020-08-27 财经 83阅读
#include 
void func() 
{    
    static int x = 0; // 在对func的三次调用中,x只进行一次初始化    
    printf("%d\n", x); // 输出x的值    
    x = x + 1;
}
 
int main(int argc, char * const argv[]) 
{    
    func(); // 输出0    
    func(); // 输出1    
    func(); // 输出2    
    return 0;
}

对于静态局部变量来说,在函数内以static声明的变量虽然与自动局部变量的作用域相同(即作用域都只限于函数内),但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同(一般来说,静态分配时存储空间于编译时在程序数据段分配,一次分配全程有效;而自动分配时存储空间则是于调用栈上分配,只在调用时分配与释放),且两次调用间变量值始终保持一致;必须注意,静态局部变量只能初始化一次,这是由编译器来保证实现。

然而:“变量赋值”和“变量初始化”不是一回事。
“变量赋值”发生在运行期,其写法遵循赋值语法规定。
“变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。

例如:


1   static int  a=1;
2   static int a;
a=1;

当函数内部采用第二种方式时,每次调用函数a=1都会再运行一次(赋值一次)。

满意请采纳,不懂请追问。

声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com