关于C语言基础知识

发布网友 发布时间:2022-04-20 08:19

我来回答

2个回答

热心网友 时间:2023-10-04 19:50

#include <stdio.h>
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都会再运行一次(赋值一次)。

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

热心网友 时间:2023-10-04 19:51

要是复合语句中定义的static变量,它的作用域就不只是复合语句内了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com