第三章 数据 [C和指针]
2011-12-28 11:21
274 查看
看完这章,被链接属性、作用域、存储类型这几个概念弄得晕头转向,现梳理如下,如有不妥,还望指教。
自动型(auto) 内存堆栈区 系统默认内部变量为auto
寄存器型(register) CPU通用寄存器 一般在函数中定义,不解释
静态型(static) 内存数据区 在程序开始就分配了固定的内存,程序结束才释放内存
外部参照型(extern) ----- 专用于多个编译单位数据传送
注意:外部参照型变量不允许进行初始化,其它类型可以。
行程序。如果相同的标识符出现在几个不同的源文件中时,它们是表示同一个实体(变量)还是不同的实体(变量)呢?这个就取
决于标识符的链接属性(linkage)。要注意的是,标识符的作用域与链接属性有关,但这两个属性并不相同。
链接属性一共有3种:external(外部)、internal(内部)和none(无)。
1.没有链接属性的标识符(none)总是被当作单独的个体,也就是说该标识符的多个声明被当作独立不同的实体。
2.属于internal链接属性的标识符在同一个源文件内的所有声明中指同一个实体,但位于不同源文件的多个声明则属于不同的实体。使用static关键
字来声明一个internal类型的标识符。static只对缺省链接属性为external的声明才有改变链接属性的效果。static用于声明局部变量时,是使这个变
量成为静态变量,就是这个变量在程序的整个运行过程中总是存在的,直到程序结束。
3.属于external链接属性的标识符在其他语言术语中也称为全局实体(变量)无论声明多少次、位于几个源文件都表示同一个实体。当extern关键字用于源文件中一个标识符的第1次声明时,它指定该标识符具有external链接属性。但是,如果它用于该标识符的第2次或以后的声明时,它并不会更改由
当它用于代码块内部变量声明时,表示修改变量的存储类型,从auto 到 static;不影响链接属性和作用域;
局部变量有函数内部使用,默认为自动存储类型,这是出于两点考虑:1需要时才分配,减少内存需求总量;2在堆栈上分配存储可有效实现递归
//变量的存储类型
一旦定义了一个变量,编译系统就会根据定义的数据类型安排存放该变量的“地方”,而这个“地方”在计算机世界里有内存1(一般数据区)、内存2(堆栈区)和CPU寄存器。根据存储“地方”的不同,才有了存储类型。规范的说法如下:自动型(auto) 内存堆栈区 系统默认内部变量为auto
寄存器型(register) CPU通用寄存器 一般在函数中定义,不解释
静态型(static) 内存数据区 在程序开始就分配了固定的内存,程序结束才释放内存
外部参照型(extern) ----- 专用于多个编译单位数据传送
注意:外部参照型变量不允许进行初始化,其它类型可以。
//链接属性
当组成一个程序的各个源文件分别被编译之后,所有的目标文件以及那些从一个或多个函数库中引用的函数链接在一起,形成可执行程序。如果相同的标识符出现在几个不同的源文件中时,它们是表示同一个实体(变量)还是不同的实体(变量)呢?这个就取
决于标识符的链接属性(linkage)。要注意的是,标识符的作用域与链接属性有关,但这两个属性并不相同。
链接属性一共有3种:external(外部)、internal(内部)和none(无)。
1.没有链接属性的标识符(none)总是被当作单独的个体,也就是说该标识符的多个声明被当作独立不同的实体。
2.属于internal链接属性的标识符在同一个源文件内的所有声明中指同一个实体,但位于不同源文件的多个声明则属于不同的实体。使用static关键
字来声明一个internal类型的标识符。static只对缺省链接属性为external的声明才有改变链接属性的效果。static用于声明局部变量时,是使这个变
量成为静态变量,就是这个变量在程序的整个运行过程中总是存在的,直到程序结束。
3.属于external链接属性的标识符在其他语言术语中也称为全局实体(变量)无论声明多少次、位于几个源文件都表示同一个实体。当extern关键字用于源文件中一个标识符的第1次声明时,它指定该标识符具有external链接属性。但是,如果它用于该标识符的第2次或以后的声明时,它并不会更改由
// static的不同含义
当它用于函数或代码块之外的声明时,表示修改标示符的链接属性,从external到internal;不影响存储类型;当它用于代码块内部变量声明时,表示修改变量的存储类型,从auto 到 static;不影响链接属性和作用域;
//注意几点
具有external链接属性的实体总是具有静态存储类型局部变量有函数内部使用,默认为自动存储类型,这是出于两点考虑:1需要时才分配,减少内存需求总量;2在堆栈上分配存储可有效实现递归
相关文章推荐
- C和指针 (pointers on C)——第三章——数据
- 读书笔记---C和指针---第三章---数据
- C和指针第三章数据
- C和指针 第三章--数据
- C和指针 学习笔记——第三章 数据
- C和指针前六章之第三章~数据
- 【笔记】C与指针 第三章 数据
- C提高——数组、数组数据类型、数组数据类型指针、多维数组本质等
- 第三章 第二节:修改数据表——ALTER (一)ADD、DROP
- 指针中隐藏数据
- 采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出
- 第三章:变量、常量与数据类型
- ACCP学习旅程之----- SQL Server(第三章 SQL数据管理)
- matlab 指针数据转换为数组数据,用于求平均值、最大值
- 大数据日知录【第三章:常用数据结构与算法】笔记
- C++文本查询程序 定义类管理数据 用智能指针 C++Primer练习12.30
- 根据char* 图像数据指针存储图像
- C++文本查询程序 定义类管理数据 用引用共享数据 不用智能指针 C++Primer练习12.27
- C++编程中类class的编写(二):含指针数据的类
- 《C++ Primer》学习笔记——第三章C++数据类型