预计阅读本页时间:-
总结:存储类
关键字:
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是访问它们分别指向的内存块的惟一方法,这意味着这两个块之间不能重叠。