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编译器里运行代码,结果如下:
运行三次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语言面试每日一题:位运算符的运用(1)
物联网--MQTT协议(十)讲:构建PUBACK报文
物联网基础:EC20 连接阿里云进行数据收发
内容来自《C和C++程序员面试秘笈》,笔者知识有限,如果发现本文有错误的地方欢迎批评、指正,若本文对您有所帮助,转发、分享也是笔者坚持的动力;若有需要,后台回复 C面试 获取《C和C++程序员面试秘笈》PDF