腾讯实习生笔试题20160305

来源:互联网 发布:淘宝怎么关闭店铺 编辑:程序博客网 时间:2024/06/04 18:56

c语言中static关键字的意义有哪几个?

  • 修饰局部变量
    一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束。但是在这里要注意的是,虽然用static对局部变量进行修饰过后,其生命周期以及存储空间发生了变化,但是其作用域并没有改变,其仍然是一个局部变量,作用域仅限于该语句块。在用static修饰局部变量后,该变量只在初次运行时进行初始化工作,且只进行一次。
#include<stdio.h>#include<iostream>void fun(){    static int a =1;    a++;    printf("%d\n", a);    return;}int main(){    fun();    fun();    return 0;}

程序执行结果为: 2 3
说明在第二次调用fun()函数时,a的值为2,并且没有进行初始化赋值,直接进行自增运算,所以得到的结果为3.
对于静态局部变量如果没有进行初始化的话,对于整形变量系统会自动对其赋值为0,对于字符数组,会自动赋值为’\0’.

  • 修饰全局变量
//有file1.cppint a = 1;//static int a = 1;
//file2.cpp#include<stdio.h>#include<iostream>extern int a;int main(){    printf("%d\n", a);    return 0;}

则执行结果为 1

但是如果在file1.c中把int a=1改为static int a=1;

那么在file2.c是无法访问到变量a的。原因在于用static对全局变量进行修饰改变了其作用域的范围,由原来的整个工程可见变为本源文件可见。

  • 修饰全局变量
    用static修饰函数的话,情况与修饰全局变量大同小异,就是改变了函数的作用域。表明此函数为静态函数,只能被本文件中其他函数所调用。

一个返回int*型的函数,有一个整数类型的参数。 请申明这个函数的指针变量。

int *
0 0
原创粉丝点击