21-总结_如何声明一个简单变量
B.3.2 总结:如何声明一个简单变量
1.选择所需的类型。
2.选择一个合适的变量名。
3.使用这种声明格式: type-specifiervariable-name;
type-specifier 由一个或多个类型关键字组成,下面是一些例子:
int erest;
unsigned short cash;
4.声明多个同类型变量时,使用逗号分隔符隔开各变量名:
char ch, init, ans;
5.可以在声明的同时初始化变量:
float mass = 6.0E24;
总结:存储类别
关键字: auto 、 extern 、 static 、 register 、 _Thread_local ( C11 )
一般注解:
变量的存储类别取决于它的作用域、链接和存储期。存储类别由声明变量的位置和与之关联的关键字决定。定义在所有函数外部的变量具有文件作用域、外部链接、静态存储期。声明在函数中的变量是自动变量,除非该变量前面使用了其他关键字。它们具有块作用域、无链接、自动存储期。以 static 关键字声明在函数中的变量具有块作用域、无链接、静态存储期。以 static 关键字声明在函数外部的变量具有文件作用域、内部链接、静态存储期。
C11 新增了一个存储类别说明符: _Thread_local 。以该关键字声明的对象具有线程存储期,意思是在线程中声明的对象在该线程运行期间一直存在,且在线程开始时被初始化。因此,这种对象属于线程私有。
属性:
下面总结了这些存储类别的属性:
| 存储类别 | 存储期 | 作用域 | 链接 | 如何声明 |
| :----- | :----- | :----- | :----- | :----- | :----- | :----- |
| 自动 | 自动 | 块 | 无 | 在块中 |
| 寄存器 | 自动 | 块 | 无 | 在块中,使用关键字 register |
| 静态、外部链接 | 静态 | 文件 | 外部 | 在所有函数外部 |
| 静态、内部链接 | 静态 | 文件 | 内部 | 在所有函数外部,使用关键字 static |
| 静态、无链接 | 静态 | 块 | 无 | 在块中,使用关键字 static |
| 线程、外部链接 | 线程 | 文件 | 外部 | 在所有块的外部,使用关键字 _Thread_local |
| 线程、内部链接 | 线程 | 文件 | 内部 | 在所有块的外部,使用关键字 static 和 _Thread_local |
| 线程、无链接 | 线程 | 块 | 无 | 在块中,使用关键字 static 和 _Thread_local |
注意,关键字 extern 只能用来再次声明在别处已定义过的变量。在函数外部定义变量,该变量具有外部链接属性。
除了以上介绍的存储类别,C还提供了动态分配内存。这种内存通过调用 malloc() 函数系列中的一个函数来分配。这种函数返回一个可用于访问内存的指针。调用 free() 函数或结束程序可以释放动态分配的内存。任何可以访问指向该内存指针的函数均可访问这块内存。例如,一个函数可以把这个指针的值返回给另一个函数,那么另一个函数也可以访问该指针所指向的内存。