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

3315694c12a74995809c16debccec08b.gif

1 题目

写出下面程序的输出结果

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

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编译器里运行代码,结果如下:

6314762378183c68909339558ae82531.png

运行三次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;

3c33e7af5b61dcb38fdf3c6dbe1b27c7.gif

好文分享:

  • C语言面试每日一题:位运算符的运用(1)

  • 物联网--MQTT协议(十)讲:构建PUBACK报文

  • 物联网基础:EC20 连接阿里云进行数据收发

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

a89c5f6153e8f6d8e0e7523a4bf82936.gif

862856537f3332916d586a7138f00021.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值