阅读 ‧ 电子书库 总结:存储类
关键字:
auto, extern, static, register
总体注解:
变量的存储类决定了它的作用域、链接和存储持续时间。存储类由声明变量的位置和与之相关联的关键字来决定。在所有的函数之外定义的变量是外部变量,其作用域为整个文件,具有外部链接,静态存储持续时间。除非使用了其他关键字,在函数中声明的变量是自动变量,具有代码块作用域,空链接,自动存储持续时间。在函数中使用关键字static定义的变量具有代码块作用域,空链接,静态存储持续时间。而在函数外使用关键字static定义的变量具有文件作用域,内部链接和静态存储持续时间。
属性:
下表对存储类进行了总结。

 

 

存 储 类 持续时间 作用域 链 接 声明方式
自动 自动 代码块 代码块内
寄存器 自动 代码块 在代码块内使用关键字register
具有外部链接的静态 静态 文件 外部 在所有函数之外
具有内部链接的静态 静态 文件 内部 在所有函数之外使用关键字static
具有空链接的静态 静态 代码块 在代码块内使用关键字static
说明:
关键字extern只用来重新声明已经在其他地方定义过的变量。在函数外定义变量会使它成为外部变量。

除了这些存储类,C还提供了可分配内存(allocated memory)。这种内存通过调用malloc()函数系列中的一个函数来分配,它返回一个可以用来访问内存的指针。在调用free()函数或程序终止之前该内存保持已分配状态。任何可以访问指向该内存的指针的函数都可以访问这块内存。例如,一个函数可以把指针值返回给另一个函数,另一个函数就可以对内存进行访问。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

B.3.3 总结:限定词

关键字

使用下列关键字来对变量起到限定作用:

const,volatile, restrict

总体注解

限定词用来限制使用变量的方式。const变量在初始化之后就不能被改变。编译器不能假定一个volatile变量不被外部代理(例如一个硬件更新)改变。为restrict所限定的指针被理解为提供对一块内存的惟一访问手段(在特定的作用域中)。

属性

声明:

阅读 ‧ 电子书库

建立了一个变量joy,它的值固定为101。

声明:

阅读 ‧ 电子书库

表明incoming在程序中的两次出现之间它的值可能会发生改变。

声明:

阅读 ‧ 电子书库

表明指针ptr不能用来改变变量joy的值。但是指针可以被指向另一个位置。

声明:

阅读 ‧ 电子书库

表明不能对指针ptr的值进行改变,也就是说它只能指向joy。但是可以使用它来改变joy的值。

原型:

阅读 ‧ 电子书库

表明在形式参数s被初始化为在函数调用中传递给simple()的任何值之后,simple()不能改变s指向的值。

原型:

阅读 ‧ 电子书库

及其等价原型:

阅读 ‧ 电子书库

表明函数supple()不会改变参量pi的值。

原型:

阅读 ‧ 电子书库

说明p1和p2是访问它们分别指向的内存块的惟一方法,这意味着这两个块之间不能重叠。