C语言面试每日一题:static 关键字

1 题目

写出下面程序的输出结果

//公众号:南风过境蜻蜓飞
//static关键字的使用
#include <stdio.h>

int sum(int a)
{
    
    
    auto int c = 0;
    static int b = 3;
    c += 1;
    b += 2;
    
    return(a + b + c);
}

int main(void)
{
    
    
    int i;
    int a = 2;
    for(i = 0; i < 3; i ++)
    {
    
    
        printf("sum :%d\r\n", sum(a));
    } 
    return 0;
}

2 答案

在VC编译器里运行代码,结果如下:

运行三次int sum(int)函数,结果分别为8, 10, 12,大家都得到正确答案了吗

3 考点解析

本题主要考察C语言关键字static 的知识及应用

在C语言中,关键字static有3个作用:

  • 在函数体内,一个被声明为静态的变量在这一函数被调用的过程中维持其值不变。

  • 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其他函数访问,它是一个本地的全局变量。

  • 在模块内,一个被声明为静态的函数只可被这一模块内的其他函数调用,即这个函数被限制在声明她的模块的本地范围内使用。

变量和函数是加sttic的区别:

  • static局部变量和普通局部变量的区别:static局部变量只初始化一次,下一次依据上一次结果值。把普通局部变量更改为静态变量之后是改变了它的存储方式,即改变了它的生存期。

  • static全局变量和普通全局变量的区别:static全局变量只初始化一次,防止在其他文件单元中被引用。把普通全局变量更改为静态变量之后是改变了它的作用域,限制了它的使用范围。

  • static函数和普通函数的区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份复制品。把普通函数更改为静态函数之后是改变了它的作用域,限制了它的使用范围。

auto 自动变量是所有局部变量默认的存储类;auto 只能用在函数内,即 auto 只能修饰局部变量;auto自动变量会随着函数被调用和退出而存在和消失

3 题目解析

第一次运行int sum(int)函数:i = 0;a = 2;运行b += 2之后b的值为4;运行c += 1之后c的值为2;故a + b + c的值为8;

第一次运行int sum(int)函数:i = 1;a = 2;由于b被声明为static局部变量,故b的初始值为上一次的结果值4,运行b += 2之后b的值变为6;c 是auto自动变量,此时c的初始值为1,运行c += 1之后c的值为2;故a + b + c的值为10;

第一次运行int sum(int)函数:i = 2;a = 2;同理,此时b的初始值为6,运行b += 2之后b的值变为8;同理,此时c的初始值为1,运行c += 1之后c的值为2;故a + b + c的值为12;

内容来自《C和C++程序员面试秘笈》,笔者知识有限,如果发现本文有错误的地方欢迎批评、指正,若本文对您有所帮助,转发、分享也是笔者坚持的动力;若有需要,扫码关注微信公众号,后台回复 C面试 获取《C和C++程序员面试秘笈》PDF版

猜你喜欢

转载自blog.csdn.net/qq_42965739/article/details/108287925