【C语言】C语言储存类型关键字详细解析
2016-05-19 21:08
465 查看
储存类型关键字(4个)
auto 声明自动变量 auto被解释为一个自动存储变量的关键字,也就是申明一块临时的变量内存。默认情况下,函数体内的变量都是auto。 如: auto int n = 2333; 表示n为一个自动存储的临时变量。 register 声明寄存器变量 这个关键字作用是请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。 如: register int x; 需要注意的是: 1、由于register声明的变量不是存储在内存中,所以不能使用“&”对变量取地址。 2、只有局部变量和形参可以作为 register 变量。 extern 声明外部变量 此关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 如: test1.c: #include <stdio.h> int i; int main() { i = 2333; } test2.c int i; 使用编译器进行编译,则会报错,因为在test1.c和test2.c中对变量i重复定义了。 但如果: test1; #include <stdio.h> extern int i; int main() { i = 2333; } test2.c: int i; 则编译器在编译test1.c时,会从test2.c文件中寻找变量i的定义声明,而这样编译则是没有问题的。 static 声明静态变量 1.修饰变量 静态全局变量:作用域仅限于变量被定义的文件中,并且作用域是从变量定义的位置开始,到文件末尾结束。 为了方便建议定义到文件的最开始位置。 静态局部变量:存在于内存的静态区,作用域在定义的函数体内,并且函数调用完成后不被释放,下次仍然可以用到这个值。 如何对两者进行区分,且看下面这个例子: static int j; void func1(void); void func2(void); void func1(void) { static int i = 0; i++; printf("i :%d\n", i); } void func2(void) { j = 0; j++; printf("j :%d\n", j); } int main(int argc, char **argv) { int k = 0; for(k = 0; k < 10; ++k) { func1(); func2(); } return 0; } 输出结果: i: 1、2、3、4、5、6、7、8、9、10 j: 1、1、1、1、1、1、1、1、1、1 2.修饰函数 函数前添加 static 指函数的作用域仅限于本文件(所以称为内部函数),避免了符号的重命名。
相关文章推荐
- 深入理解C++的动态绑定和静态绑定
- L1-005. 考试座位号(C++)
- C++类型安全
- C++STL中的tuple 与 pair (piecewise construction)
- c语言总结
- MFC——工厂模式——计算器
- 【C程序设计语言(第二版)学习】++ndigit[c-'0']理解
- VS2010对C++11的支持列表(感觉大部分都不支持)
- C++ 实现反射机制
- 基于贝叶斯学习的自适应中文词组的联想输入原理及C++实现
- L1-003. 个位数统计(C++)
- 使用VS开发人员命令提示符查看C++虚函数表及类内存分布
- 回顾:C++开篇课堂
- C++之引用
- C语言链表各种操作
- 【转载】C++基本功和 Design Pattern系列 ctor & dtor
- C语言约瑟夫环链表
- java jni jbyteArray传参给c++
- 抽象工厂 C++实现
- c++学习书籍汇总