简要概述:
《C和指针》第三章对数据进行了描述。
其中主要讲解了---变量的三个属性:作用域、链接属性和存储类型。
这三个属性决定了该变量在“什么地方可以使用”以及“该变量的值能够保持多久”。
总结作用域:
1、文件作用域、代码块作用域、原型作用域和函数作用域
文件作用域:在代码块之外声明的标识符 file scope
代码块作用域:声明在{}中
原型作用域:int getScore(int ucStudent); 该函数原型声明中,int ucStudent具有原型作用域
函数作用域:这个不用管。
总结链接属性:
链接属性:external(外部链接属性)、internal(内部链接属性)和none(无链接属性)
链接属性的作用:标识的链接属性决定如何处理在不同源文件中出现的标识符。
例如,相同的标识符A出现在不同的源文件中,当这些源文件编译后形成目标文件,
下一步进行链接形成可执行文件时,这些A表示同一个实体还是不同实体,由A的链接属性决定。
external:具有外部链接属性的标识符,无论声明多少次,不管存在多个源文件中,都表示同一个实体。
internal:当A具有intonernal链接属性,处于同一个源文件中的声明指向同一个实体,处于不同源文件中的多个声明分属不同的实体。
none:不管处于同一个源文件还是不同源文件的声明,均指向不同的实体。
1、具有文件作用域的变量默认均为“外部链接属性”
2、在函数内部或代码块中声明的变量默认为“none“
3、static 和 extern可以改变标识符的链接属性,但是具有如下限制:
1)static :只对默认为external属性的声明才有改变的效果
2)当extern关键字用于源文件中一个标识符的第一次声明时,具有改变链接属性的效果,但用于标识符的第二次或以后的声明时,则
不会更改第一次声明的链接属性。
总结存储类型
存储类型指该变量存储变量值的内存类型。
静态 | 普通内存中 | 全局变量、static全局变量、static局部变量 |
自动存储类型 | 存储在堆栈中 | 局部变量 |
register | 存储在寄存器中 | register关键字修饰的变量 |