




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C C语言程序设计教程语言程序设计教程编写组编写组20072007年年1 1月月黄兴鼎版权所有黄兴鼎版权所有作用范围作用范围存储类别存储类别包含多个源文件的程序包含多个源文件的程序黄兴鼎版权所有黄兴鼎版权所有标识符的作用域例标识符的作用域例/* cw0900.c标识符的作用域例标识符的作用域例*/#include void fun(int n)n=6;printf(n in fun:%dn,n);int main()int n;n=3;fun(n);printf(n in main:%dn,n); return 0;在本例中在本例中, ,形参和实参的变量名都形参和实参的变量名都为为n,n,但他
2、们的作用范围不同但他们的作用范围不同, ,所以所以不会互相影响。不会互相影响。在讨论函数的形参变量时曾说:形参在讨论函数的形参变量时曾说:形参只在被调用时才分配内存单元,调用只在被调用时才分配内存单元,调用结束立即释放。可见形参只有在该函结束立即释放。可见形参只有在该函数内才是有效的,离开该函数就不能数内才是有效的,离开该函数就不能再使用了。这种变量的有效性的范围,再使用了。这种变量的有效性的范围,称为变量的作用域。称为变量的作用域。黄兴鼎版权所有黄兴鼎版权所有不仅形参变量,不仅形参变量,C语言中所有的语言中所有的量量都有自己的作用域。都有自己的作用域。这些量都是用标识符来说明的,所以又称为这
3、些量都是用标识符来说明的,所以又称为标识符的作用标识符的作用域。域。标识符包括变量名、函数名等,标识符包括变量名、函数名等,作用域就是指在程序作用域就是指在程序中可以被使用的范围。中可以被使用的范围。在C语言中可以在函数内部、外部和函数的参数中定义和声明变量,定义和声明的位置不同定义和声明的位置不同,变量的作用域不同变量的作用域不同,变量的作用域也称为可见性可见性。变量的声明方式不同,其作用域也不同。C语言中的变量,按作用域范围可分为两种,即局部变量局部变量和全局变量全局变量。黄兴鼎版权所有黄兴鼎版权所有简介简介变量定义的完整格式:变量定义的完整格式: 数据类型数据类型占据存储空间的大小占据存
4、储空间的大小取值范围取值范围存储类别存储类别在内存中持续的时间(生存期)在内存中持续的时间(生存期)在硬件中存放的位置在硬件中存放的位置其它属性其它属性作用范围作用范围 可以被引用的程序部分(可见性)可以被引用的程序部分(可见性)作用范围和存储类别作用范围和存储类别前面几章中,我们已经知前面几章中,我们已经知道变量的数据类型和变量道变量的数据类型和变量名的有关规定,这一章主名的有关规定,这一章主要介绍存储类别。要介绍存储类别。C语言程序运行语言程序运行内存的分配内存的分配1 代码代码2 静态数据静态数据3 动态数据动态数据(栈(栈stack)4 自由空间自由空间(堆(堆heap)堆是自由空间,
5、这些空间由系统程序掌握,当C程序在运行期间要求空间时,可向系统申请,系统根据要求分配程序要求的空间,用完之后,程序又将这些空间交还给系统。堆堆黄兴鼎版权所有黄兴鼎版权所有作用范围作用范围程序中的所有标识符构成了名字空间。程序中的所有标识符构成了名字空间。标识符的作用范围标识符的作用范围能够引用该标识符的程序部分。能够引用该标识符的程序部分。四种作用范围:四种作用范围:文件作用范围文件作用范围函数作用范围函数作用范围程序块作用范围程序块作用范围函数原型作用范围函数原型作用范围作用范围和存储类别作用范围和存储类别1. 1.主函数中定义的变量只在主函数中有效主函数中定义的变量只在主函数中有效, ,而
6、不因为在主函数中定义而在而不因为在主函数中定义而在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。2. 2. 不同函数中可以使用相同名字的变量不同函数中可以使用相同名字的变量, ,它们代表不同的对象它们代表不同的对象, ,互不干扰。互不干扰。3. 3. 形式参数也是局部变量。形式参数也是局部变量。4. 4. 在一个函数内部在一个函数内部, ,可以在复合语句中定义变量可以在复合语句中定义变量, ,这些变量只在本复合语句这些变量只在本复合语句中有效中有效, ,这种复合语句也称为这种复合语句也称为“分程序分程序”或或“程序块程序
7、块”。黄兴鼎版权所有黄兴鼎版权所有作用范围作用范围文件作用范围文件作用范围在函数外声明的标识符,可以在在函数外声明的标识符,可以在从声明处开始的从声明处开始的所有函数中被引用。所有函数中被引用。包括:全局变量,函数定义,函数原型。包括:全局变量,函数定义,函数原型。作用范围和存储类别作用范围和存储类别int total;int max(int, int);int main() int limit;int max(int x, int y) 作用范围作用范围从声明或定义的位置从声明或定义的位置开始,到文件的末尾。开始,到文件的末尾。黄兴鼎版权所有黄兴鼎版权所有作用范围作用范围函数作用范围函数作用
8、范围在函数体内定义的标识符,只能在函数体内被引用。在函数体内定义的标识符,只能在函数体内被引用。包括:包括:语句标号语句标号作用范围和存储类别作用范围和存储类别int main() int x; char c; loop: goto loop;内部变量:内部变量:在一个函数内部定义的变在一个函数内部定义的变量称内部变量。它只在本函数范围内量称内部变量。它只在本函数范围内有效,即:只有在本函数内才能使用有效,即:只有在本函数内才能使用这些变量,故称为这些变量,故称为“局部变量局部变量” 。黄兴鼎版权所有黄兴鼎版权所有作用范围作用范围程序块作用范围程序块作用范围在程序块内声明的变量,在程序块内被引
9、用。在程序块内声明的变量,在程序块内被引用。包括:程序块内的变量(局部变量),函数的参数。包括:程序块内的变量(局部变量),函数的参数。作用范围和存储类别作用范围和存储类别int max(int x, int y) int main() int a=9; int a=6; 作用范围作用范围从声明的位置开始,到从声明的位置开始,到程序块的右花括号。程序块的右花括号。覆盖覆盖同名变量,内部变量同名变量,内部变量“覆盖了覆盖了”外部变量外部变量黄兴鼎版权所有黄兴鼎版权所有关于声明和定义关于声明和定义定义声明定义声明定义一个标识符,同时也是声明定义一个标识符,同时也是声明。但不能说声明就是定义。但不能
10、说声明就是定义.对于变量,定义意味着创建,即为其分配内存。对于变量,定义意味着创建,即为其分配内存。引用声明引用声明只是声明一个需要引用的标识符。只是声明一个需要引用的标识符。作用范围和存储类别作用范围和存储类别函数原型作用范围函数原型作用范围函数原型中的参数函数原型中的参数。int max(int x, int y);int main() int max(int x, int y) 黄兴鼎版权所有黄兴鼎版权所有存储类别存储类别四种存储类别说明符四种存储类别说明符autoregisterexternstatic两种存储时期两种存储时期自动存储时期自动存储时期autoregister静态存储时期
11、静态存储时期externstatic作用范围和存储类别作用范围和存储类别自动存储类别自动存储类别寄存器变量寄存器变量外部变量外部变量静态变量静态变量和函数和函数函数中的局部变量,如不专门函数中的局部变量,如不专门说明为静态存储类别说明为静态存储类别, ,都是动态都是动态分配存储空间的分配存储空间的, ,存储在动态存存储在动态存储区中。对它们分配和释放存储储区中。对它们分配和释放存储空间的工作由编译系统自动处理,空间的工作由编译系统自动处理,因此这类局部变量称为自动变量因此这类局部变量称为自动变量。自动变量用关键字自动变量用关键字autoauto作存储类作存储类型的说明。型的说明。函数形参为局部
12、变量,函数形参为局部变量,也为自动变量。自动变量存放在也为自动变量。自动变量存放在运行栈区。运行栈区。C C语言规定语言规定autoauto通常在局部变通常在局部变量的定义中可以省去不写。量的定义中可以省去不写。但不能说省去不写的变量就是但不能说省去不写的变量就是自动变量,因为自动变量,因为全局变量是静态全局变量是静态变量,也可以省去不写变量,也可以省去不写。黄兴鼎版权所有黄兴鼎版权所有自动存储类别自动存储类别自动存储自动存储程序执行到变量所在的程序块内时创建它,退出时销毁。程序执行到变量所在的程序块内时创建它,退出时销毁。不会被自动初始化。不会被自动初始化。auto(自动变量)(自动变量):
13、局部变量的缺省类别。:局部变量的缺省类别。不赋初值,其值不确定。不赋初值,其值不确定。程序块中声明的变量,函数的参数。程序块中声明的变量,函数的参数。作用范围和存储类别作用范围和存储类别auto int a, b;register int count=1;使用频繁的变量,存取其值要花费不少时间。为提高执行效率,语言允使用频繁的变量,存取其值要花费不少时间。为提高执行效率,语言允许将局部变量动态的值放在寄存器中,需要用时直接从寄存器取出参加运许将局部变量动态的值放在寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。由于对寄存器的存取速度远高于对内存的存算,不必再到内存中去存取。由
14、于对寄存器的存取速度远高于对内存的存取速度,因此这样做可以提高执行效率。这种变量叫做寄存器变量。取速度,因此这样做可以提高执行效率。这种变量叫做寄存器变量。register(寄存器变量)(寄存器变量):建议编译器把变量放进高速的寄:建议编译器把变量放进高速的寄存器。存器。只适用于自动变量只适用于自动变量。黄兴鼎版权所有黄兴鼎版权所有静态存储类别静态存储类别静态存储静态存储程序开始执行时创建,在程序执行期间,变量一直存在。程序开始执行时创建,在程序执行期间,变量一直存在。在编译时赋初值,在编译时赋初值,缺省初值缺省初值时时自动被初始化自动被初始化为为0 或或 0。static(静态变量)(静态变
15、量):可以用于在程序块中定义的变量。:可以用于在程序块中定义的变量。退出程序块后依然存在,并保留值。退出程序块后依然存在,并保留值。但不改变其作用范围,即只能在所在程序块内被使用。但不改变其作用范围,即只能在所在程序块内被使用。extern(外部变量)(外部变量):用来声明在:用来声明在“外部外部”定义的全局变量。定义的全局变量。仅用于声明变量。仅用于声明变量。作用范围和存储类别作用范围和存储类别static int a, b;extern int total;外部变量:外部变量:函数之外定义的变量称为外部变函数之外定义的变量称为外部变量。外部变量可以为本文件中其他函数所共量。外部变量可以为本
16、文件中其他函数所共用。它的有效范围为从声明变量的位置开始用。它的有效范围为从声明变量的位置开始到本源文件结束。所以也称全局变量。到本源文件结束。所以也称全局变量。注意区别:注意区别:0数字、数字、0和和0字字符符黄兴鼎版权所有黄兴鼎版权所有案例分析:存储类别案例分析:存储类别存储类别存储类别作用范围和存储类别作用范围和存储类别void try(int a) auto int b=10; /*b是动态变量,是动态变量,auto可省可省,每次调用被重新赋值。每次调用被重新赋值。*/ static int c=10; /*c是静态变量,在是静态变量,在try函数中保持上次运算结果不变函数中保持上次运
17、算结果不变*/ b+; c+; printf(a=%dtb=%dtc=%dn,a,b,c);int main() int i; / i是是 Auto被省略了被省略了 /*如果下面如果下面c 定义为自动变量定义为自动变量,则输出一个随机数则输出一个随机数,而不是而不是0, 如果如果c 是一个字符变量是一个字符变量,则输出一个随机字,可能是汉字。则输出一个随机字,可能是汉字。*/ static int c; for (i=1;i=3;i+)try(i); /*c是静态变量是静态变量,并未赋值。所以为并未赋值。所以为0,如果如果c是字符变量是字符变量,则输出为空格则输出为空格*/ printf(c=
18、%d,c); return 0;a=1b=11c=11a=2b=11c=12a=3b=11c=13c=0读下面的程序,写出结果。读下面的程序,写出结果。(cw0901.c)黄兴鼎版权所有黄兴鼎版权所有案例分析:外部变量案例分析:外部变量外部变量外部变量(cw0902.c)作用范围和存储类别作用范围和存储类别#include int main() extern int a; int c=3; printf(a = %dn, a); extern int c; c=4; printf(inner c=%dn, c); printf(c=%dn, c); return 0;int a=1;int c
19、=5;a=1inner c=4c=3a是外部变量,在所有区域都为1,c在主函数中保持不变,在复合语句中虽声明是外部变量,但重新赋值后值发生了变化,但只在复合语句中起作用。这里a和c都是外部静态变量省略了extern内外都有内优先黄兴鼎版权所有黄兴鼎版权所有案例分析:作用范围与存储类别案例分析:作用范围与存储类别(cw0903.c)作用范围和存储类别作用范围和存储类别#include void a(void); /*a 函数原型声明函数原型声明 */void b(void); /*b 函数原型声明函数原型声明 */void c(void); /*c 函数原型声明函数原型声明 */int x=1;
20、 /*全局变量定义全局变量定义,可以省去不写可以省去不写static */int main() int x=5; /* 在主函数中局部重新赋值在主函数中局部重新赋值*/ printf(local x in outer scope of main is %dn, x); int x=7; /*x 变量的新作用变量的新作用(块块)范围范围 重新赋值重新赋值*/ printf(local x in inner scope of main is %dn,x); /*x变量的新作用变量的新作用(块块)范围结束范围结束,恢复主函授数中的恢复主函授数中的x值值 */ printf(nlocal x in o
21、uter scope of main is %dn,x);作用范围与存储类别作用范围与存储类别黄兴鼎版权所有黄兴鼎版权所有案例分析:作用范围与存储类别案例分析:作用范围与存储类别作用范围和存储类别作用范围和存储类别 a(); b(); c(); a(); b(); c(); printf(local x in main is %dn, x); return 0;void a() int x = 25; /*每次被调用时重新赋值每次被调用时重新赋值*/ printf(n local x in a is %d after enteringn, x); x+; printf(local x in a
22、 is %d before exitingn, x);顺序两次调用顺序两次调用a()、b()、c()函数。函数。黄兴鼎版权所有黄兴鼎版权所有案例分析:作用范围与存储类别案例分析:作用范围与存储类别作用范围和存储类别作用范围和存储类别void b() static int x = 50; /*静态变量仅在首次被调用时初始化静态变量仅在首次被调用时初始化1次次*/ printf(n local x in b is %d after enteringn, x); x+; /保持保持x 的值的值 printf(local x in b is %d before exitingn, x);void c(
23、) printf(nglobal x is %d on entering cn, x); x*=10; /x 的原值为全局变量的原值为全局变量x的值的值1, printf(global x is %d on exiting cn, x);黄兴鼎版权所有黄兴鼎版权所有作用范围和存储类别作用范围和存储类别黄兴鼎版权所有黄兴鼎版权所有作用范围与存储类别作用范围与存储类别作用范围和存储类别作用范围和存储类别案例分析:作用范围与存储类别案例分析:作用范围与存储类别建议:不必要时不要使用全局变量,原因如下:建议:不必要时不要使用全局变量,原因如下: 全局变量在程序的全部执行过程中都占用存储单元,而不是仅在
24、需要全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。时才开辟单元。 使用全局变量过多,会降低程序的清晰性。在各个函数执行时都可能使用全局变量过多,会降低程序的清晰性。在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使用全局变量。改变外部变量的值,程序容易出错。因此,要限制使用全局变量。降低函数的通用性。因为函数在执行时要依赖于其所在的外部变量。如降低函数的通用性。因为函数在执行时要依赖于其所在的外部变量。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。但若该外部变量
25、与其他文件的变量同名时,就会出现问题,降低了程去。但若该外部变量与其他文件的变量同名时,就会出现问题,降低了程序的可靠性和通用性。一般要求把程序中的函数做成一个封闭体,除了序的可靠性和通用性。一般要求把程序中的函数做成一个封闭体,除了通过通过“实参实参形参形参”的渠道与外界发生联系外,没有其他渠道。的渠道与外界发生联系外,没有其他渠道。全局变量的定义中可以省去不写全局变量的定义中可以省去不写static黄兴鼎版权所有黄兴鼎版权所有在复合语句中定义的自动变量在复合语句中定义的自动变量/*教材书教材书P97例例7-6在复合语句中定义的自动变量在复合语句中定义的自动变量*/#include int
26、main() auto int x,y=1,z=1;printf(n input a number:n);scanf(%d,&x);if (x0)auto int y,z;y=6*x;z=9-x;printf(y=%d z=%dn,y,z);printf(y=%d z=%dn,y,z); return 0;3Y=18 z=6Y=1 z=1自动变量离开他的应用范围即自动变量离开他的应用范围即失效,各有自己的应用范围。失效,各有自己的应用范围。(p97L7-6)一旦退出复合语句,复合语句中的Y,Z值已经不复存在黄兴鼎版权所有黄兴鼎版权所有包含多个源文件的程序包含多个源文件的程序包含多个源文
27、件的程序包含多个源文件的程序每个函数的定义必须在一个文件内,不能被分割。每个函数的定义必须在一个文件内,不能被分割。全局变量可以被同一文件内的函数访问。全局变量可以被同一文件内的函数访问。如果需要被其他文件内的函数访问,则必须在其他文件内声明。如果需要被其他文件内的函数访问,则必须在其他文件内声明。extern 表示变量表示变量myGlobal是在另一个文件内定义的。是在另一个文件内定义的。一个文件内定义的函数,也可以被其他文件内的函数调用。一个文件内定义的函数,也可以被其他文件内的函数调用。在每个文件内加入该函数的原型(声明为外部函数)。在每个文件内加入该函数的原型(声明为外部函数)。函数的
28、原型可以不需要函数的原型可以不需要 extern。作用范围和存储类别作用范围和存储类别int myGlobal;extern int myGlobal;a.cb.c黄兴鼎版权所有黄兴鼎版权所有包含多个源文件的程序包含多个源文件的程序包含多个源文件的程序包含多个源文件的程序举例举例作用范围和存储类别作用范围和存储类别#include int a, b;extern int max(void);int main() scanf(%d%d, &a, &b); printf(“max is %dn, max(); return 0;extern int a, b;int max() r
29、eturn (ab?a:b);AB(Cw0904a.c)(Cw0904b.c)黄兴鼎版权所有黄兴鼎版权所有包含多个源文件的程序包含多个源文件的程序包含多个源文件的程序包含多个源文件的程序static限制全局变量只能被同一文件内的函数访问。限制全局变量只能被同一文件内的函数访问。限制函数只能被同一文件内的函数调用。限制函数只能被同一文件内的函数调用。作用范围和存储类别作用范围和存储类别static int myGlobal;static void myFunc() 黄兴鼎版权所有黄兴鼎版权所有编译包含多个源文件的程序编译包含多个源文件的程序编译包含多个源文件的程序编译包含多个源文件的程序每个源文
30、件必须被编译,然后链接成一个可执行文件。每个源文件必须被编译,然后链接成一个可执行文件。如果有一个文件作了改动,则必须重新编译所有相关的文如果有一个文件作了改动,则必须重新编译所有相关的文件。件。一般会提供一般会提供 make 工具用来管理和编译多源文件的程序。工具用来管理和编译多源文件的程序。创建创建 makefile 文件,记录编译规则。文件,记录编译规则。自动查找必须编译的源文件。自动查找必须编译的源文件。可以创建可以创建工程工程(project)文件来管理多源文件的程序。文件来管理多源文件的程序。作用范围和存储类别作用范围和存储类别黄兴鼎版权所有黄兴鼎版权所有/ /* * cw0905
31、a.c cw0905a.c(文件)(文件)* */ /#include#include stdio.h intint main() main() /*以下以下3行声明在本函数中将要调用的在其他文件中定义的行声明在本函数中将要调用的在其他文件中定义的3个函数个函数*/ externextern voidvoid enter_string(char str enter_string(char str); ); externextern voidvoid delete_string(char str,char ch delete_string(char str,char ch);); extern
32、voidextern void print_string(char str print_string(char str);); charchar c; c; charchar str80; str80; enter_string(str enter_string(str);); printf printf(输入要删除的字符输入要删除的字符 ); ); scanf(%c,&c scanf(%c,&c); ); delete_string(str,c delete_string(str,c);); print_string(str print_string(str);); retu
33、rnreturn 0; 例例 有一个若干字符的字符串有一个若干字符的字符串,今输入一个字符今输入一个字符,要求程要求程序将字符串中该字符删去。用外部函数实现。序将字符串中该字符删去。用外部函数实现。黄兴鼎版权所有黄兴鼎版权所有/* cw0905b.c(文件输入字符串)(文件输入字符串)*/#include void enter_string(char str80) /* 定义外部函数 enter-string*/ gets(str); /*向字符数组输入字符串*/ /* cw0905c.c(文件删除(文件删除字符串字符串)*/void delete_string(char str,char c
34、h) /定义外部函数定义外部函数delete_string int i,j; for(i=j=0;stri!=0;i+) if(stri!=ch) strj+=stri; strj=0;黄兴鼎版权所有黄兴鼎版权所有/* cw0905d.c(文件输出(文件输出字符串字符串)*/#include void print_string(char str) printf(%sn,str); 运行情况如下:运行情况如下: (输入字符串)输入字符串) (输入要删去的字符)(输入要删去的字符) (输出已删去指定字符的字符串)(输出已删去指定字符的字符串)黄兴鼎版权所有黄兴鼎版权所有内部函数和外部函数内部函数和
35、外部函数 根据函数能否被其他源文件调用,将函数区分为内部函数内部函数和外部函数外部函数。如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加static。即static 类型标识符 函数名(形参表)例如例如: : static int fun ( int a , int b )1. 定义函数时,如果在函数首部的最左端加关键字extern,则表示此函数是外部函数,可供其他文件调用。例如,函数首部可以写为extern int fun (int a, int b),这样,函数fun就可以为其他文件调用。而且可以省略extern,则隐含为外部函数。2.
36、 在需要调用此函数的文件中,用extern对函数作声明,表示该函数是在其他文件中定义的外部函数 。黄兴鼎版权所有黄兴鼎版权所有register::虽然寄存器的速度非常快,但是使用虽然寄存器的速度非常快,但是使用register修修饰符也有些限制:饰符也有些限制:register变量必须是能被变量必须是能被CPU寄存器所接寄存器所接受的类型。意味着受的类型。意味着register变量必须是单个的值,并且其长变量必须是单个的值,并且其长度应小于或等于基本整型的长度度应小于或等于基本整型的长度;而且而且register变量可能不存放在内存中,所以不能用取址运变量可能不存放在内存中,所以不能用取址运算
37、符算符“&”来获取来获取register变量的地址。变量的地址。static:主要有两个作用:主要有两个作用:1、修饰变量。由于被、修饰变量。由于被static修饰的变量总是存在内存的静态修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。会被销毁,函数下次使用时仍然能用到这个值。2、修饰函数。函数前加、修饰函数。函数前加static使得函数成为静态函数。但此使得函数成为静态函数。但此处处“static”的含义不是指存储方式,而是指对函数的作用域的含义不是指存储方式
38、,而是指对函数的作用域仅局限于本文件仅局限于本文件(所以又称内部函数所以又称内部函数)。使用内部函数的好处。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。是否会与其它文件中的函数同名。小结小结黄兴鼎版权所有黄兴鼎版权所有1只有局部自动变量和形式参数可以作为寄存器变量只有局部自动变量和形式参数可以作为寄存器变量。 其它(如全局变量)不行。在调用一个函数时占用一些寄存器以存放寄存器变量的值,函数调用结束释放寄存器。此后,在调用另一个函数时又可以利用它来存放该函数的寄存器变量。2 2一个计算
39、机系统中的寄存器数目是有限的一个计算机系统中的寄存器数目是有限的。 不能定义任意多个寄存器变量。不同的系统允许使用的寄存器个数不同。有的小型机只允许使用3个寄存器来容纳寄存器变量。有些能进行优化的编译系统,能自动识别使用频繁的变量,在有可使用寄存器的情况下自动为它们分配寄存器,而不需要程序员指定。3 3不同的系统对不同的系统对registerregister变量的处理是不同的变量的处理是不同的。 微机上用的MS C、Turbo C对register变量当作自动变量处理,分配内存单元,并不真正把它们存放在寄存器中,因此,虽然程序合法,但并不提高执行速度。计算机只允许将int,char和指针型变量
40、定义为寄存器变量。4 4局部静态变量不能定义为寄存器变量。局部静态变量不能定义为寄存器变量。 不能写成: register static int a,b,c; 不能把变量a,b,c既放在静态存储区中,又放在寄存器中,二者必居其一。5 5通用寄存器的长度一般与机器的字长相同,通用寄存器的长度一般与机器的字长相同, 所以数据类型为float、long以及double的变量,通常不能定义为寄存器类别。只有只有intint、shortshort和和charchar类型的变量才准许定义为寄存器变量类别。类型的变量才准许定义为寄存器变量类别。说明:说明:黄兴鼎版权所有黄兴鼎版权所有1从作用域角度分,有局部变量和全局变量。它们采取的存储类别如下:从作用域角度分,有局部变量和全局变量。它们采取的存储类别如下:局部变量局部变量自动变量,即动态局部变量(离开函数,值就消失)自动变量,即动态局部变量(离开函数,值就消失)静态局部变量(离开函数,值仍保留)静态局部变量(离开函数,值仍保留) 寄存器变量(离开函数,值就消失)寄存器变量(离开函数,值就消失)形式参数可以定义为自动变量或寄存器变
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子商务知识全面复习试题及答案
- 2024年SCMP预测试题及答案解析
- 智能医院文化企业制定与实施新质生产力战略研究报告
- 生物技术行业跨境出海战略研究报告
- 抗衰老面部按摩霜行业跨境出海战略研究报告
- 眼睛营养保护剂行业深度调研及发展战略咨询报告
- 膜结构AI应用行业深度调研及发展战略咨询报告
- 地域文化主题餐厅行业深度调研及发展战略咨询报告
- 真菌病害靶向药品创制行业深度调研及发展战略咨询报告
- 斯洛文尼亚语中的动物象征意义论文
- 语文-2025年1月广西高三调研考全科试卷和答案(12地级市)
- GB/T 15972.40-2024光纤试验方法规范第40部分:传输特性的测量方法和试验程序衰减
- 2025年郑州铁路局招聘笔试参考题库含答案解析
- 外研版(2025新版)七年级下册英语Unit 2 学情调研测试卷(含答案)
- 2024预防流感课件完整版
- 耕地变宅基地申请书
- 2025天猫服饰春夏趋势白皮书
- 煤矿井下人员定位系统技术条件培训
- 肺结核宣传课件下载
- 人力资源管理个人信息保护制度
- 四年级数学(小数加减运算)计算题专项练习与答案
评论
0/150
提交评论