static和const的作用是什么
无论在面试还是在平时的考试,这个问题出现的频率都是非常高的,但是网上有些解释太过详细,接下来我将给大家总结性的说一下这两个关键字的具体作用。
static的作用
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
这句话的意思就是在 static 修饰局部变量的时候就算函数结束,局部变量依然存在且维持其值不变,提升了局部变量的生存周期和全局变量一样长。
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
这句话的意思就是 static 在修饰全局变量时,只能被当前.c文件下的函数使用,不能被其他.c文件调用。
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
被static修饰的函数只能在当前.c这个文件内被访问,在其他文件内则无法访问此函数,否则会造成 undefined reference(找不到函数定义)错误。
意思大家都明白了吧,但是在回答的时候使用上面来回答是不是会显得高大上且有逼格呢!嘿嘿道理大家都懂,真是拐的一批。
const的作用及为什么要用const
这里我要稍微详细的讲解一下啊,
注意千万不要说:“const意味着常数”,因为这就像是我们玩盲僧qq摸眼w闪现到adc后面发现没有R一样尴尬,看似一套操作干净利索,其实在别人眼里憨的一批。
我举例子说明:
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。
也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:
1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告 诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)
2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。
如何潇洒简洁的回答const的作用
const关键字的作用是所修饰的变量除了在其初始化时其他时间不能被修改,同时const在修饰指针时所处的位置不同会产生不同的效果。一句话就是const在修饰指针时作用是修饰在其位置之后的变量,例const int *a; 那么const修饰的就是 a ,a代表的是空间不是地址,那么就是a不可以被改变,但是地址可以被改变,int * const a; const后面是 a ,a是指针,所以就代表着地址不可以被修改,但是a可以被修改。
总结
总而言之,在你理解这两个关键字的基础上再去总结自己的方法和语言来解释这两个关键字,才能在下次遇到这种问题的时候不会出错。感谢阅读,如果觉得还不错既得点赞哦!