C Primer Plus 第十二章学习总结……2015.5.5

来源:互联网 发布:嘉艺发型设计软件 编辑:程序博客网 时间:2024/06/06 09:46

C Primer Plus

             第五版


第十二章 存储类、链接和内存管理



作用域:描述了一个程序可以访问的标示符的一个或多个区域。
代码块作用域:在代码块中定义的一个变量,函数的形式参量也具有
代码块作用域。

C99把代码块扩大到 for while do while 循环 和if语句控制的代
码块{};

文件作用域:一个在所有函数之外定义的变量。文件作用域也称全局
变量。


链接分:外部链接,内部链接,空连接。


具有代码块作用域或者函数原型作用域的变量有 空连接,意味着它
是由其定义的代码块或函数所私有。


具有文件作用域的变量可能有内部链接或外部链接,一个具有外部链
接的变量可以再一个多文件的程序中的任何地方中使用。
一个具有内部链接的变量 可以再一个文件的任何地方使用。


static 定义内部链接变量;

C语言 变量有两种存储方式:静态存储时期和自动存储时期。

变量具有静态存储时期:他在程序运行期间将一直存在。具有文件作

用域的变量和static定义的变量具有静态存储时期。


具有代码块作用域的变量一般具有自动存储时期。


C语言通过使用 作用域 链接 存储时期 三种方式定义5种存储类型。
:自动 寄存器 具有代码块作用域的静态,具有文件作用域的静态,
具有内部链接的静态。


自动变量:在代码块或函数头部定义的任意变量都属于自动存储类,  
可以使用关键字auto定义的变量 是 自动存储类。

代码块或函数中的局部变量将覆盖全局变量。运行离开代码块时全局
变量从新起作用。


寄存器变量:可以使用 register 定义寄存器变量,但此句是一个
请求,并不是一条命令。不一定嫩成功,不能对其使用地址运算符。

代码块内静态变量是通过存储类说明符static定义变量,在代码块中
只赋值一次。  对函数参量不能使用static

外部变量具有外部链接的静态变量 ;外部变量在其他文件中定义,
在本文件中使用要用extern 声明 ,在同一文件可以省略。在代码块
中使用extern 再次声明只是表面函数要用该变量,其实不声明也可
以使用。


外部变量作用域 是从声明位置到程序结束。


一个外部变量只可以进行一次初始化,一定是在变量被定义的时候。
externa char perimes='A';错误   extern 表明其是个外部变量
,但外部变量只能在定义时被初始化。

创建数组有三种方法:
1:声明一个数组,声明时用常量表达式
2:声明一个变长数组,声明时用变量表达式指定数组维数
3:声明一个指针,调用malloc()函数 (动态分配内存)
常用形式 int * ptr=(int *)malloc(n*sizeof(int)); free(ptr)
释放内存。


int *ptr=(int *)calloc(n,sizeof(int));
第一参数:n 所需的内存数量
第二参数:每个单元以字节大小。

自动存储结果是在运行完定义部分之后自动释放。
malloc()创建的数组不必局限于一个函数


静态存储时期存储类变量所需内存数量在编译时以知道,在整个程序
运行期间都是可用的,在程序开始时存在,在程序结束消失。

自动变量在程序进入包含该变量的代码块时产生,在退出这一代码块
时终止。

动态分配内存在调用malloc或相关函数时产生,调用free释放,内
存块可以再一个函数中定义,在另一个函数中释放。如在一个函数中
创建返回一个指针,在另一个函数对其释放。


限定词 可以在一个声明中多次使用 const const const int n=5;


等价于const int n=5;


1、指针 参量声明中使用const
2、指针本身使用还是其指定的值使用 
const float *ptr   ptr指向一个常量浮点值
float *const ptr   总指向一个地址,指向的值可以改变
const float *const ptr   都不变


float *const ptr  等价于const float * ptr 


3、对全局变量使用const


限定词 volatile   restrict







































0 0