首页 > 试题广场 >

有以下程序,程序的输出结果是?

[单选题]

有以下程序

#include <stdio.h>
void func(int n) {
    static int num = 1;
    num += n;
    printf("%d ", num);
}

int main() {
    func(3);
    func(4);
    printf("\n");
    return 0;
}


程序运行后的输出是

  • 4 5
  • 4 8
  • 3 5
  • 3 4
推荐
本题中num为静态局部变量,执行fun (3) 后,输出4,执行fun (4) 后输出8,所以选项B正确。
编辑于 2015-02-03 17:50:49 回复(1)
静态局部变量有以下特点:
    (1)该变量在全局数据区分配内存;
    (2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
    (3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
    (4)它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;
参考:http://blog.csdn.net/hackbuteer1/article/details/7487694
编辑于 2016-04-07 08:39:07 回复(0)
static 变量num在编译时初始化一次,存于静态数据区中,后面就不再初始化了
发表于 2015-08-19 15:23:03 回复(0)
静态局部变量相当于全局变量(只是只有在这个函数中能访问,但是生命周期是和全局变量差不多的),函数退出之后变量还在,而且只在第一次进入的时候做初始化,以后会跳过初始化语句,保留原来的值(也就是说,如果item是static的,那么只有在第一次进入这个函数的时候会执行item=0,以后都不会执行。)
发表于 2017-09-12 14:48:22 回复(0)
静态变量只初始化一次
发表于 2016-02-23 09:30:10 回复(0)

图片说明

发表于 2017-05-20 10:24:19 回复(0)
谢谢:static 变量num在编译时初始化一次,存于静态数据区中,后面就不再初始化了
发表于 2019-08-17 09:44:01 回复(0)
num为静态变量,只需要声明一次,之后声明无效
发表于 2017-08-05 19:39:57 回复(0)
静态局部变量有以下特点:
    (1)该变量在全局数据区分配内存;
    (2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
    (3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
    (4)它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;
发表于 2021-11-19 17:05:05 回复(0)
读题要细...注意static_(:з」∠)_
发表于 2021-02-22 19:17:13 回复(0)

考察点:静态变量和局部变量的存储区域不同,这里静态变量的存储区,变量只会初始化一次,后面不会再初始化,局部变量才是执行了一个函数区域,另一个函数区域又会重新初始化

发表于 2019-06-28 21:54:56 回复(0)
静态局部变量初始化以后,再次调用不用初始化
发表于 2017-03-08 10:05:56 回复(0)
局部静态变量,函数每次执行时,都是从定义静态变量的下个位置开始执行的,不是每次调用函数都重新定义变量,所以静态变量的值是累加后的值。
发表于 2016-06-25 14:50:04 回复(0)