《C语言程序设计方案》教案(清华谭浩强)(8)

2019-04-04 22:46

int i。 a[0] a[1] a[2] a[3] fun(&a[1])。第2个的开始连续3个地址 for (i=0。i<=3。i++) 3.5 6.1 0.2 7.9 printf(\。 x[0] x[1] x[2] }

void fun(float x[4]) 共用内存单元 { x[0]=x[0]+1。x[1]=x[1]+1。x[2]=x[2]+1。 } 结果:3.5 7.1 1.2 8.9

数组a和数组x

数组a独享存贮区共享存贮区 数组a独享存贮区 a[0] 3.5 a[1] 7.1 a[0] 3.5 a[1] 6.1 a[2] 1.2 a[1] 7.1

a[2] 0.2 a[3] 8.9 a[2] 1.2 a[3] 7.9 a[3] 8.9

注意:不要使用x[3] , 即:x[2]是子程序最后一个可用元素。

(3)例子

书P164 例8.10例8.11 例8.12书P166例8.13

(4)二维数组作函数参数

二维数组的传值调用与一维数组相似。 例: main ( )

{ int a[3][5]。

调用函数 …

mul( n , a[1][2] , a[0][4] ) 。 … 函数定义 }

int mul(int x , int y , int z ) { int s 。 …

例 (j5_8.c) main ()

{ int tran(int n,int x[])。 int total,a[4][4]={{3,8,9,10},{2,5,-3,5},{7,0,-1,4},{2,4,6,0}}。

tran(2,a)。第一行的第0列 地址 9个

tran(2,&a[0])。 第一行的第0列 地址 9个

tran(0,&a[2])。第二行的第0列 地址 4个 }

计算数组元素在数组中的序号 tran(int n,int arr[])

{ int i。

for (i=0。i<4。i++)

printf(\。 printf(\。 }

程序输出: 7,0,-1,4, 7,0,-1,4, 7,0,-1,4,

七、局部变量和全局变量 1.变量存储作用域

(1)作用域:决定一个变量的有效范围。 a)作用域是整个程序的变量——为全局变量 b)作用域只限于程序的一部分的变量——为局部变量 局部变量:——在一个函数内部定义的变量(内部变量),它只在本函数

范围内有效。

全局变量:——在函数之外定义的变量称为外部变量,外部变量是全局变量

(2)有效范围为: 从定义变量的位置开始到本源文件结束。 书P169

外部变量在文件开头定义,则在整个文件范围内都可以使

用该外部变量。书P170

(3)作用: 增加函数间数据联系的渠道。 同一个文件中的所有函数都能引用全局变量的值 书P170 例8.15

八、变量的存储类型

————用来规定变量的作用域以及它们存在的长短

2.变量的存储类别

? 变量存在的长短:决定一个变量存在的范围(整个程序,部分函数)

? 从变量存在的时间(即生存期)角度来分,有静态存储变量和动态存

储变量

静态存储方式:

指在程序运行期间分配固定的存储空间的方式

动态存储方式:

指在程序运行期间根据需要进行动态的分配存储空间的方式 供用户使用的存储空间:

程 序 区 三个部分 静态存储区 动态存储区

静态存储区:主要放全局变量

即:在程序开始执行时给全局变量分配存储区,程序执行完毕

就释放。

动态存储区:主要放

①函数形参变量。在调用函数时给形参变量分配存储空间。 ②局部变量(未加static说明的局部变量) ③函数调用时的现场保护和返回地址

在函数套眼调用开始时分配动态存储空间,函数结束时释放这些空间。 (分配和释放是动态的)

C语言中,变量和函数有两个属性: 数据类型 (如整型、字符型等) 存储类型 (数据在内存中存储的方法) C语言提供:(四种存贮类型符)

① auto(自动) ② register(寄存器) ③ staic(静态) ④ extern (外部)

C语言规定:存贮类型符放在变量定义的最前面

即:staic int a , b 。 (1)自动变量 ( auto )

定义在函数内部的变量,变量的建立与撤消是系统自动进行的。 在调用此函数时才给此变量分配存储单元,当函数执行完毕时,存储单元就被撤消。

定义方式有:在函数体开始处定义 、在复合语句中定义 注: 1)自动变量的存储类型符(auto)一般可省去。

2)自动变量是一个局部变量,其值在一个函数的两次调用之间不能保持。

例(j4_11.c)

(2)静态变量(static)

在整个函数调用期间都可以保存其值的变量(在函数调用结束后,其值不消失而保留原值,即占用的存储单元不释放)

? 静态变量未初始化时,其值是零 ? 自动变量未初始化时,其值是随机的

书P173 例8.17

注:静态变量的生存期是永久的,但它们的作用域却不都是全局的。

既:凡有static说明的,其作用域都是局限的; a)局限于本函数内(静态局部变量)

b)局限于本文件内(静态外部变量)书P175 例8.18

示例: (j4_15.c)

? 如果把静态变量放在函数外面定义 称为静态外部变量,作用域为全

? 静态外部变量的全局性仅限于本程序,它的值不能在文件之间互传 *(3)寄存器变量 ( register )

存放于CPU的一个寄存器中的变量(在CPU中进行)

? 可以把使用频率高的变量 定义为register,提高程序执行的速度。 ? 寄存器变量只能用于整型和字符型。 ? 变量的个数受CPU寄存器数目的限制。

示例:书P175 例8.19(j4_12.c) 目前P系列 CPU自动分配 *(4)外部变量(extern )

外部变量主要用在:要在n个文件之间互访一批变量 ? 外部变量的值是“永久”保留的;既从一个函数调用到另一个

函数调用,它原来的值始终存在。 ? 外部变量的作用域是整个程序(工程)。 1)作用域在n个文件之间的外部变量

一个程序中包含若干个文件,各个文件都要用到一些共用的变量时,就可以在一个文件中定义一批变量,而相关文件只要用extern说明它们是外部变量,那么,这些变量就可以供n个文件“全局”使用;同时,运算结果也可“共享”

(外部变量开辟一条文件之间传递数据的通道)P176 例8.20 2)作用域在一个程序中的外部变量

定义变量的语句应放在变量作用域的开始处,而在引用这些变量的函数中,可以不再使用变量说明。 示例: (j4_18.c) 总结:P180 作用域分析:

局部变量:自动变量(函数内):离开函数,值消失

定义 auto int a 函数内定义

静态局部变量(函数内):离开函数,值保留

定义 static int a函数内定义

寄存奇变量(函数内):离开函数,值消失

定义 register int a函数内定义

全局变量:静态外部变量(函数内,本文件)首字母大写

使用static声明(可多次声明)

定义 ertern int A 函数外定义,用static声明(内外均可)

非静态外部变量(工程内所有文件)首字母大写 非动态,编译时分配内存

定义 ertern int A 函数外定义 变量存储时间

动态存储:自动变量(本函数内存在) 寄存奇变量(本函数内存在) 形式参数(本函数内存在)

静态存储:静态局部变量(函数外存在) 静态外部变量(函数外本文件内存在)

非静态外部变量(函数外,工程内所有文件存在) 变量存放位置

内存中静态存储区:静态局部变量(本函数) 静态外部变量(函数外部静态变量) 非静态外部变量(其它文件可使用) 内存中动态存储区:动态变量和形式参数 CPU中的寄存奇:寄存奇变量 * 3.内部函数和外部函数

内部函数:一个函数只能被本文件中其它函数所调用。(称静态函数)

在定义时:在函数名和函数类型前面加static 即:static 类型标识符 函数名(形参表)

外部函数:以extern说明的函数,表示此函数是外部函数。 书P182 例8.22

4. 工程文件(工程文件prj):多*.C源文件

九.编译预处理 书P187

编译预处理:——编译前对源程序进行的一些预加工。 C语言的预处理功能主要有三种:

a)宏定义 b)文件包含 c)条件编译 以“#”符号开头的行——为预处理的标志 1.宏定义(宏替换)用预处理命令#define指定的预处理 1)不带参数的宏定义

用一个指定的标识符(即名字)来代表一个字符串 格式:#define 标识符 字符串 例: #define PI 3.14159


《C语言程序设计方案》教案(清华谭浩强)(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:西安交通大学计算机程序设计指针实验

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: