第-章━━函数的定义和调用优秀文档_第1页
第-章━━函数的定义和调用优秀文档_第2页
第-章━━函数的定义和调用优秀文档_第3页
第-章━━函数的定义和调用优秀文档_第4页
第-章━━函数的定义和调用优秀文档_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++程序设计第3章(1)

━━函数的定义和调用1主要内容函数概述函数的定义函数的调用和返回函数的参数传递━━值传递函数的参数传递━━引用传递函数的原型声明全局变量及其作用域局部变量及其作用域C++程序的内存布局标识符的作用域━━块作用域、文件作用域、函数原型作用域、函数作用域变量的存储类型和生存期函数的调用机制2函数概述关于C++函数:①C++程序的结构化特点:就是整个程序由一个或多个函数组成,每个函数具有相对独立的功能,函数之间有明显的界面,程序整体具有清晰的模块结构,易于修改。

②C++函数有两大类:一类是系统预定义的,称为库函数或标准函数,这些库函数按照不同的功能进行分类,集中定义在不同的头文件中,用户只要在自己的程序中包含某个头文件,就可直接使用该头文件中定义的函数。另一类是用户自定义函数,用户可以根据需要将程序中某个具有相对独立功能的程序段定义为函数。③C++程序的基本模块:就是函数,任何一个C++程序均由若干个函数组成,其中有且仅有一个主函数,它是程序执行的入口函数,VC++控制台编程是由用户定义的main()作为入口函数,Windows编程是由编译器定义的WinMain()作为入口函数。3函数概述④C++函数之间是并列平等的关系,在程序中的定义位置任意,一个函数可以调用其它函数,也可以被其他函数所调用,但主函数只能调用其他函数,而不能被调用。函数定义的并列关系函数调用的层次关系

voidf1() {f1的函数体…}

voidf2() {f2的函数体…}

voidmain() {main的函数体}

voidf3() {f3的函数体…}

voidf4() {f4的函数体…}

voidf5() {f5的函数体…}main()f1()f2()f3()f4()f6()4函数的定义函数的定义:①格式:《返回值类型》函数名

(

《类型1形参1

,类型2形参2

,…,类型n形参n》

)

{

语句序列

}②说明:

返回值类型━━可以是C++中任意基本数据类型、已定义的构造数据类型;若函数没有返回值,则返回值类型定义为void型;若函数返回值类型省略,表示返回值类型为int型。函数体函数头5函数的定义函数名━━按标识符命名规则命名,其后括号内定义的是函数的形式参数;若该函数为无参函数,括号内的void通常省略不写,但括号不能省略!形式参数表━━列出所有形式参数的数据类型、参数名称;各参数即使类型相同,也必须分别进行类型说明;形参类型可以是C++中任意基本数据类型、已定义的构造数据类型。函数参数的作用:函数调用时,主调函数通过参数将数据传递给被调函数。函数返回值的作用:函数返回时,被调函数可将一个确定的值带回到主调函数。①若函数有返回值,则return语句格式为:return表达式;

且return后面表达式值的类型必须与函数返回值类型相匹配!

②若函数无返回值,则返回值类型定义为void,且return语句格式为:return;6函数的调用和返回函数的调用:①格式:

函数名

(《实参1

,实参2

,…,实参n》)

②调用:就是控制从主调函数转去执行被调函数的函数体。调用时,系统要将实参值按位置传递给对应的形参,因此,一般情况下实参与形参在个数、排列顺序上都必须一一对应,且类型匹配。函数的返回:就是控制从被调函数返回到主调函数的调用点。返回时,即在被调函数中执行到return语句时,若有返回值带回,则先计算return语句后面表达式的值,并转换成所规定的返回值类型,此时系统会在内存中建立一个临时变量,用来存放该返回值,待主调函数中包含该调用式的表达式语句从该临时变量中取值后,系统便撤消该临时变量。7【例】(定义求三个实数中最大数的函数max()。)#include<iostream.h>float

max(floatx,floaty,floatz)

//要将三个实数传递给max()函数,需定义三个形参。{

floatt=y>z?y:z;

return(x>t?x:t);}voidmain(){floata,b,c;cout<<“请输入三个实数:”;cin>>a>>b>>c;cout<<“最大数:”<<max(a,b,c)<<endl;}

运行:请输入三个实数:1356-89↙最大数:56main()函数调用max(13,56,-89)main()函数的后续语句函数max(13,56,-89)return56主调函数被调函数8函数的参数传递形参与实参:

①函数定义时,写在函数头部参数表中的变量,称为形式参数(形参)。

②函数调用时,写在调用式参数表中的表达式、变量、常量,称为实在参数(实参)形参与实参的结合:编译时,并不为各函数的形参分配存储空间,只有在该函数被调用时,其形参才占用存储空间,并通过堆栈从主调函数中获得值,这个过程称为形参与实参的结合,一旦函数调用结束,该函数的形参就被撤销。函数的参数传递方式有三种:①值传递

②引用传递③地址传递9函数的参数传递━━值传递值传递:

①调用函数进行值传递时,调用式中对应的实参可以是常量、变量、表达式。

②先计算出各个实参表达式的值,并将值赋给对应的形参变量,其过程就是赋值,因此,要求实参值的类型与形参变量类型符合赋值兼容。

③由于值传递就是赋值传递,因此是单向传递,即实参值传递给形参变量后,若形参变量的值发生变化不会影响到对应的实参变量。【例】#include<iostream.h>voidswap(

inta

,

intb

){

intt=a;a=b;b=t;

}voidmain(){intx,y;cout<<“请输入两个整数:”;cin>>x>>y;cout<<“调用前:x=”<<x<<“\ty=”<<y<<endl;

swap(

x

,

y

);cout<<“调用后:x=”<<x<<“\ty=”<<y<<endl;

}

运行:请输入两个整数:5897↙调用前:x=56y=97调用后:x=56y=9710【例】#include<iostream.h>intmaxi(inta,intb){ returna>b?a:b;}floatmaxf(floata,floatb){ returna>b?a:b;}voidmain(void){floatx=3.4,y=5.6;charc1=‘A’,c2=‘B’;inti=20,j=30;cout<<maxi(x,y)

<<‘\t’;cout<<maxf(x,y)

<<‘\t’;cout<<maxi(c1,c2)

<<‘\t’;cout<<maxf(c1,c2)

<<‘\t’;cout<<maxi(i+j,45+y)

<<‘\t’;cout<<maxf(i+j,45+y)

<<endl;}运行:floatx=3.4→inta=3floaty=5.6→intb=5floatx=3.4→floata=3.4floaty=5.6→floatb=5.6charc1=‘A’→inta=65charc2=‘B’→intb=66charc1=‘A’→floata=65charc2=‘B’→floatb=66表达式i+j值50,int型→inta=50表达式45+y值50.6,float型→intb=50表达式i+j值50,int型→floata=50表达式45+y值50.6,float型→floatb=50.611函数的参数传递━━引用传递引用类型:是C++中一种特殊的数据类型,

定义引用类型变量,其本质是给一个已定义的变量起一个别名,系统并不为引用类型变量分配内存空间,引用类型变量与其相关联的变量使用的是同一个内存空间。引用类型变量的定义:

①格式:

<类型>&

<引用类型变量名>

=<变量名>

②功能:定义一个引用类型变量,必须同时对其进行初始化,使之与一个已定义过的同类型变量相关联,即给该已定义过的变量起一个别名。【例】#include<iostream.h>voidmain(){intx=5;int&

x1

=x;intx2=x;

x1+=2;cout<<“x=”<<x<<“\tx1=”<<x1<<“\tx2=”<<x2<<endl;}

5→7xx15x2运行:x=7x1=7x2=512函数的参数传递━━引用传递引用类型变量可以作为函数的形参,以实现参数的引用传递。

【例】voidswap(

int&a

,

int&b

){

intt=a;a=b;b=t;

}引用传递:①调用函数时,系统对引用类型的形参是不分配存储空间的,其本质是给对应的实参变量起一个别名。②进行引用传递时,调用式中对应的实参只能是变量。③引用传递时传递的是变量名,引用类型的形参变量与其相关联的实参变量使用的是同一个存储空间,若引用类型的形参变量的值发生变化,其相关联的实参变量的值也就随之变化,因此是双向传递。13【例】(值传递)#include<iostream.h>voidswap(

inta

,intb

){

intt=a;a=b;b=t;}voidmain(){intx=5,y=10;cout<<“调用前:x=”<<x<<“\ty=”<<y<<endl;

swap(

x

,

y

);cout<<“调用后:x=”<<x<<“\ty=”<<y<<endl;

}

【例】(引用传递)#include<iostream.h>voidswap(

int&a

,int&b

){intt=a;a=b;b=t;}voidmain(){intx=5,y=10;cout<<“调用前:x=”<<x<<“\ty=”<<y<<endl;

swap(

x,y

);cout<<“调用后:x=”<<x<<“\ty=”<<y<<endl;}

运行:调用前:x=5y=10调用后:x=10y=5引用传递:main():swap():x

a

10y

b

5510运行:调用前:x=5y=10调用后:x=5y=10值传递:main():swap():x

a

10y

b

551051014函数的原型声明函数的原型声明:①C++中,把函数的定义部分称为函数的定义性声明,而把对函数的引用性声明称为函数的原型声明。②当函数定义在前、调用在后时,可直接调用;当函数调用在前、定义在后时,在函数被调用前,必须对被调函数作原型声明,函数原型声明可放在主调函数中,也可放在所有函数之外。③函数原型声明的目的是告知编译系统,该函数的返回值类型、参数个数、顺序、各参数的类型,以便编译系统对其后该函数调用式是否有效进行语法检查。函数原型声明的格式:

格式1:

函数头+末尾加分号

《返回值类型》函数名

(

《类型1形参1

,类型2形参2

,…,类型n形参n》

);格式2:函数头(去掉形参变量名)+末尾加分号《返回值类型》函数名

(《类型1

,类型2

,类型n

》);15【例】(输入一个8位二进制数,将其转换为十进制数输出。例:若输入11010001,

110100012=1(27)+1(26)+0(25)+1(24)+0(23)+0(22)+0(21)+1(20)=20910,输出209。)#include<iostream.h>voidmain(){double

power(

double

,

int

);//power()函数的引用性声明,即原型声明

intvalue=0,k;charc;cout<<“请输入一个8位二进制数:”;

for(inti=7;i>=0;i--)

{cin>>c; if(c==‘1’)value+=(int)power(

2

,

i);}//调用power()函数

cout<<“十进制数:”<<value<<endl;}

doublepower(doublex,intn)//power()函数的定义性声明{doublet=1;while(n--)t*=x;

returnt

;}运行:请输入一个8位二进制数:11010001↙十进制数:20916②当函数定义在前、调用在后时,可直接调用;for(inti=1;i<=n;i++)《返回值类型》函数名(《类型1形参1,类型2形参2,…,类型n形参n》){intx=5;//x为auto局部变量,在栈区4→floata=3.③局部数据区(栈区)━━存放auto局部变量。::b=::b+4;//引用全局变量b{floatt=y>z?y:z;①作用:若程序中的某个变量要被多个函数所访问,可将其定义为全局变量。《存储类型》类型变量名1《=初值1》《,变量名2《=初值2》,…》;《存储类型》类型变量名1《=初值1》《,变量名2《=初值2》,…》;for(inti=1;i<=3;i++)【例】voidswap(int&a,int&b){intt=a;a=b;b=t;}【例】(求π的值,arctan(x)用级数计算,直到某项绝对值不大于10-15为止。)#include<iostream.h>#include<math.h>voidmain(){doublea,b;

doublearctan(doublex)

;//arctan()函数的引用性声明,即原型声明a=16*arctan(

1/5.

);//调用arctan()函数,且如果写成1/5,结果就都是0b=4*arctan(

);//调用arctan()函数,且如果写成1/239,结果就都是0cout<<“π=”<<(a-b)<<endl;}

doublearctan(doublex)//arctan()函数的定义性声明{

doublet=x,sum=0;

for(intsign=1,i=1;

fabs(t/i)>1e-15;i+=2)

{

sum+=sign*t/i;t=t*x*x;sign*=-1;}

returnsum; }运行:17【例】(找出11~999之间的数m,使之满足m、m2、m3均为回文数。回文:各位数字左右对称的整数。例:11、112=121、113=1331,则输出11。)分析:从最低位开始,用除10取余的方法,依次取出该数的各位数字;按反序重新构成新的数,若新数与原数完全相等,则原数为回文。#include<iostream.h>voidmain(){boolsymm(intn);

//symm()函数的引用性声明,即原型声明for(intm=11;m<=999;m++) if( symm(m)

&&symm(m*m)

&&symm(m*m*m

)

) cout<<“m=”<<m<<“\tm*m=”<<m*m<<“\tm*m*m=”<<m*m*m<<endl;}

boolsymm(intn)//symm()函数的功能是判断整数n是否是回文{

for(inti=n,m=0

;

i!=0;

i=i/10)

m=m*10+i%10;//m是新构的数

return(m==n);}运行:m=11m*m=121m*m*m=1331m=101m*m=10201m*m*m=1030301m=111m*m=12321m*m*m=136763118【例】(求如下公式,r和s值键盘输入,SIN(x)用级数计算,计算精度为10-3。)#include<iostream.h>#include<math.h>voidmain(){doubletsin(double);doublek,r,s;cout<<“请输入r和s的值:”;cin>>r>>s;if(r*r<=s*s)k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s));elsek=tsin(r*s)/2;cout<<“r=”<<r<<“\ts=”<<s<<“\tk=”<<k<<endl;}

doubletsin(doublex){doublesum=0,t=x;

for(inti=1,sign=1,p=1;

fabs(t/p)>=1e-3

;

sign*=-1)

{

sum+=

sign*t/p;t=t*x*x;i+=2;p=p*i*(i-1);}

returnsum;}运行:请输入r和s的值:31↙19全局变量及其作用域关于全局变量:①作用:若程序中的某个变量要被多个函数所访问,可将其定义为全局变量。

②全局变量:指定义在函数之外的变量。

③作用域:全局变量可以定义在函数外的任何位置,一旦在某个位置定义了全局变量,其后的任何函数均可以访问该全局变量。④存储类型:全局变量存放在全局数据区(静态区),分配该区时内存自动初始化为0,因此全局变量若不做初始化,其初值为0。⑤生存期:全局变量在程序开始运行时就在全局区分配,程序运行结束才被释放。20局部变量及其作用域关于局部变量:①块的概念:指程序中用花括号“{}”括起来的一个程序段,称为一个块。②局部变量:指定义在函数之内或某个块内的变量。

③作用域:局部变量可以定义在块内的任何位置,一旦在块内的某个位置定义了局部变量,只能在该块内该位置之后的那个区域内才可以访问该局部变量。④存储类型:auto自动类型局部变量、static静态类型局部变量。⑤auto自动局部变量:存放在局部数据区(栈区),分配栈区时内存不做初始化,因此auto局部变量若不做初始化,其初值不确定。⑥static静态局部变量:存放在全局数据区(静态区),分配该区时内存自动初始化为0,因此static局部变量若不做初始化,其初值为0。21C++程序的内存布局操作系统为一个C++程序运行定义了四个内存区域:①代码区━━存放程序代码。②全局数据区(静态区)━━存放全局变量、static静态局部变量。全局变量在程序开始运行时就在该区分配;static静态局部变量在程序运行中第一次进入其作用域时在该区分配。二者都是直到程序运行结束才被释放。

③局部数据区(栈区)━━存放auto局部变量。在程序运行到其作用域时在栈区分配,但怎样分配在编译时就已经确定。auto局部变量在离开其作用域时即被释放。④动态数据区(自由存储区、堆区)

━━存放运行时由new运算符动态创建的变量。动态创建的变量在编译时无法为它们预定存储空间,系统根据运行时的具体要求在该区进行分配。在该区的变量必须用delete运算符才能将其释放。22标识符的作用域作用域:指程序中标识符(如变量名、函数名)的有效使用范围,即作用范围。目的:解决标识符的同名问题。当标识符具有不同的作用域时,允许标识符同名;当标识符的作用域完全相同时,不允许标识符同名。C++中作用域有五种:①块作用域②文件作用域③函数原型作用域④函数作用域⑤类作用域23标识符的作用域━━块作用域块:指程序中用花括号“{}”括起来的一个程序段,称为一个块。块作用域:在块内声明的变量只能在该块内被引用,开始于变量的声明处,结束于块的结尾处。几条原则:

①形参变量的作用域:在其所属函数的函数体块内。②局部变量的作用域:在其所属的块内,该变量的声明位置之后的那个区域内。③循环语句for(表达式1;表达式2;表达式3)中表达式1所声明变量的作用域:在for语句所属的块内,该变量的声明位置之后的那个区域内。④局部优先原则:具有块作用域的标识符在其作用域内,将屏蔽其作用块包含本块的同名标识符。24【例】(块作用域)#include<iostream.h>intfun(intn){cout<<“正在求:1+2+…+”<<n<<“\n”;

ints=0;for(inti=1;i<=n;i++)

{

chara=7;cout<<a;s+=i;

}returns;}voidmain(){inta=5,b=7;cout<<“第1次调用:”<<fun(a)<<endl;

{inta

=9,

b

=11;cout<<“第2次调用:”<<fun(a)<<endl;cout<<“第3次调用:”<<fun(b)<<endl;

}cout<<“第4次调用:”<<fun(b)<<endl;

}形参n作用域局部s作用域局部i作用域局部a作用域局部a、b作用域局部a、b作用域运行:正在求:1+2+…+5第1次调用:15正在求:1+2+…+9第2次调用:45正在求:1+2+…+11第3次调用:66正在求:1+2+…+7第4次调用:2825【例】(块作用域)#include<iostream.h>voidmain(){inta=10,b=20,c=30;cout<<“a=”<<a<<“\tb=”<<b<<“\tc=”<<c<<endl;

{inta=40,b

=50;

c=a+

b;cout<<“a=”<<a<<“\tb=”<<b<<“\tc=”<<c<<endl;}cout<<“a=”<<a<<“\tb=”<<b<<“\tc=”<<c<<endl;}【例】(块作用域)#include<iostream.h>voidmain(){for(

inta=1

;a<=5;a++)

{

inta=2;cout<<“a=”<<++a<<endl;

}cout<<“a=”<<a<<endl;}

运行:a=10b=20c=30a=40b=50c=90a=10b=20c=90运行:a=3a=3a=3a=3a=3a=626标识符的作用域━━文件作用域文件作用域:在函数外声明的变量可在该文件内被引用,开始于变量的声明处,结束于文件的结尾处,即一旦在某个位置定义了全局变量,在其后的整个文件中均可以访问。几条原则:

①全局变量作用域从定义处开始到文件结尾处结束,遵循声明在前、使用在后。②当全局变量引用在前、声明在后时,需先对全局变量作外部声明。格式:extern

类型全局变量名;③当全局变量与块作用域内的局部变量同名时,局部变量优先。④在块作用域内,若要引用同名的全局变量时,可通过域运算符“::”来引用。格式:

::

全局变量名

27#include<iostream.而一般的全局变量可以通过extern修饰后,作用于该程序的多个源文件。if(r*r<=s*s)k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s));①调用函数进行值传递时,调用式中对应的实参可以是常量、变量、表达式。cout<<maxf(x,y)<<‘\t’;charc;④动态数据区(自由存储区、堆区)━━存放运行时由new运算符动态创建的变量。【例】(求如下公式,r和s值键盘输入,SIN(x)用级数计算,计算精度为10-3。cout<<maxf(i+j,45+y)<<endl;a=5b=6a=5b=6cout<<“x=”<<x<<“\tx1=”<<x1<<“\tx2=”<<x2<<endl;}④局部优先原则:具有块作用域的标识符在其作用域内,将屏蔽其作用块包含本块的同名标识符。⑦返回到主调函数继续执行。a=5b=6变量的存储类型和生存期cout<<“x=”<<x<<“\tx1=”<<x1<<“\tx2=”<<x2<<endl;}voidf3()swap(x,y);变量的存储类型和生存期若需引用,可间接实现,即通过该static局部变量的地址进行访问(后续章节介绍)。作用域:指程序中标识符(如变量名、函数名)的有效使用范围,即作用范围。cout<<“x=”<<x<<“\tx1=”<<x1<<“\tx2=”<<x2<<endl;}②文件作用域while(n--)t*=x;变量的存储类型和生存期cout<<“调用后:x=”<<x<<“\ty=”<<y<<endl;④在块作用域内,若要引用同名的全局变量时,可通过域运算符“::”来引用。①声明局部变量时,用static修饰属静态类型变量,存放在全局数据区,即静态区。6,float型→floatb=50.③引用传递时传递的是变量名,引用类型的形参变量与其相关联的实参变量使用的是同一个存储空间,若引用类型的形参变量的值发生变化,其相关联的实参变量的值也就随之变化,因此是双向传递。#include<iostream.调用后:x=10y=5【例】(文件作用域)#include<iostream.h>inta

=5,

b

;

//a、b定义在函数外,为全局变量externintc;//全局变量c引用在前、声明在后时,需先外部声明voidmain(){inta=10,b=20; //a、b定义在函数内,为局部变量cout<<“a=”<<a<<“\tb=”<<b<<“\tc=”<<c<<endl; a=18; ::b=::b+4;//引用全局变量b c=::a+a;//引用全局变量c和a,引用局部变量acout<<“a=”<<a<<“\tb=”<<b<<“\tc=”<<c<<endl;cout<<“a=”<<::a<<“\tb=”<<::b<<“\tc=”<<c<<endl;}intc=88;//c定义在函数外,为全局变量运行:a=10b=20c=88a=18b=20c=23a=5b=4c=2328标识符的作用域━━函数原型作用域、函数作用域函数原型作用域:①在函数原型声明的参数表中声明的标识符,所具有的作用域称为函数原型作用域,即从其声明处开始,到函数原型声明的结束处结束。②函数原型声明中所声明的标识符,其作用域仅在函数原型声明的语句内,因此与该函数的定义和调用均无关,所以在函数原型声明中可只作参数的类型声明,而省略参数名。【例】函数原型声明:voidswap(

inta

,

intb);//a、b作用域仅在该句内函数原型声明:voidswap(

int,

int);函数作用域:①函数作用域是指在函数内定义的标识符在其定义的函数内均有效,即不论在函数内的任何地方定义,在整个函数内均可以引用。②C++中只有语句标号具有函数作用域。29变量的存储类型和生存期存储类型:变量的存储类型反映了变量占用内存空间的期限,它规定了变量的生存期,即何时为变量分配内存空间、何时撤消变量收回为其分配的内存空间。在声明变量时,可对其存储类型进行定义,格式:《存储类型》类型

变量名1《

=初值1

》《,变量名2《

=初值2

》,

…》;

◆其中存储类型有四种:①自动类型━━auto②静态类型━━static③寄存器类型━━register④外部类型━━extern

◆当存储类型省略时,对于局部变量则表示auto。30变量的存储类型和生存期auto自动类型变量:①声明局部变量时,用auto修饰属自动类型变量,存放在局部数据区,即栈区。②auto局部变量在程序运行到其作用域时在栈区分配,在离开其作用域时即被释放,因此生存期仅在其作用域内。③声明局部变量时若省略存储类型,C++编译器默认为auto。④自动类型变量未初始化时,其初值不确定。⑤全局变量无自动类型。31变量的存储类型和生存期static静态类型变量:①声明局部变量时,用static修饰属静态类型变量,存放在全局数据区,即静态区。②static局部变量的生存期:在程序运行中第一次进入其作用域时在静态区分配,离开其作用域时并不释放,只是不能引用,若程序运行中再次进入该static局部变量的作用域,由于该变量已经存在,所以不再分配空间,可直接引用。static局部变量直到程序运行结束才被释放。③static局部变量的作用:是保存函数的运行结果,以便再次调用该函数时,能继续使用上次调用的计算结果。注意,不在其作用域时,不能直接引用;若需引用,可间接实现,即通过该static局部变量的地址进行访问(后续章节介绍)。32变量的存储类型和生存期④全局变量声明时无论前面加或不加static,都具有静态生存期,因为全局变量都存放在全局数据区,即静态区。⑤但用static修饰的全局变量,称为静态全局变量。静态全局变量与一般的全局变量在形式上类似,但含义有所不同,静态全局变量只能在其定义的源文件中有效(该文件中可以有若干个函数),而在该程序的其他源文件中则是无效的;而一般的全局变量可以通过extern修饰后,作用于该程序的多个源文件。⑥静态类型变量未初始化时,其初值为0。33【例】#include<iostream.h>inta

=1,

b

=2

;

//a、b为全局变量,在静态区intfun(){

staticinta=3;//a为静态局部变量,在静态区

intb=4;//b为auto局部变量,在栈区a+=b;

returna;}voidmain(){inta=5,b=6; //a、b为auto局部变量,在栈区cout<<“a=”<<a<<“\tb=”<<b<<endl;

for(inti=1;i<=3;i++)

{

cout<<“第”<<i<<“次调用:”<<fun()<<endl;cout<<“a=”<<a<<“\tb=”<<b<<endl;}cout<<“a=”<<::a<<“\tb=”<<::b<<endl;}运行:a=5b=6第1次调用:7a=5b=6第2次调用:11a=5b=6第3次调用:15a=5b=6a=1b=234【例】(与上例比较)#include<iostream.h>inta

=1,

b

=2

;

//a、b为全局变量,在静态区intfun(){inta=3;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论