C程序设计 第6章指针.ppt

上传人:s****8 文档编号:82788220 上传时间:2023-03-26 格式:PPT 页数:60 大小:252.50KB
返回 下载 相关 举报
C程序设计 第6章指针.ppt_第1页
第1页 / 共60页
C程序设计 第6章指针.ppt_第2页
第2页 / 共60页
点击查看更多>>
资源描述

《C程序设计 第6章指针.ppt》由会员分享,可在线阅读,更多相关《C程序设计 第6章指针.ppt(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第6章章 指针指针6.1 指针的概念指针的概念6.2 变量与指针变量与指针6.3 数组与指针数组与指针6.4 字符串与指针字符串与指针6.5 函数与指针函数与指针6.6 返回指针值的函数返回指针值的函数6.7 指针数组和指向指针的指针指针数组和指向指针的指针6.8 引用引用6.1 指针的概念指针的概念l在高级语言编程中,面对的是变量名。而源在高级语言编程中,面对的是变量名。而源程序经过编译处理后,每一个变量在程序执程序经过编译处理后,每一个变量在程序执行前,将分配在指定的位置上。程序执行过行前,将分配在指定的位置上。程序执行过程中,计算机到与变量名对应的内存地址去程中,计算机到与变量名对应的

2、内存地址去访问放在那里的数据。访问放在那里的数据。l这种按变量的地址直接存取变量的方法称为这种按变量的地址直接存取变量的方法称为“直接访问直接访问”方式。方式。int a;a180011:FF2Ba=18;l还有一种方式,将一个变量的地址放在另一个变量还有一种方式,将一个变量的地址放在另一个变量中,这时存取变量,可通过存放地址的变量间接地中,这时存取变量,可通过存放地址的变量间接地访问存放变量的内存空间。访问存放变量的内存空间。int a=18;a180011:FF2B0011:FF2Bip这个存放地址的变量称为指针。6.2 变量与指针变量与指针l指针变量是一种特殊的变量,它和以前学过指针变量

3、是一种特殊的变量,它和以前学过的其他类型的变量的不同之处是:的其他类型的变量的不同之处是:用它来指用它来指向另一个变量。向另一个变量。l一般的一般的C+编译系统为每一个指针变量分配编译系统为每一个指针变量分配4个字节个字节的存储单元,用来存放变量的地址。的存储单元,用来存放变量的地址。6.2.1 定义指针变量定义指针变量l格式:格式:l类型类型*变量名变量名1;lint*ip;lchar*cp;6.2.2 建立指针建立指针l建立指针包括建立指针包括定义指针定义指针和和给指针赋初值给指针赋初值。l用用“&”操作符可以获取变量的地址。操作符可以获取变量的地址。int a=5;const int b

4、=3.14;int*ipa=&a;const int*ipb=&b;/常量指针常量指针,指向常变量,指向常变量int*const ipc=&a;/指针常量指针常量,指针本身是常量,指针本身是常量注意:注意:l常数是不可寻址的,但常变量可以。常数是不可寻址的,但常变量可以。lint*iptr=&23;/错错l不能用一个整数给一个指针变量赋初值。不能用一个整数给一个指针变量赋初值。int*iptr=2345;/错错6.2.3 间接引用指针间接引用指针l“*”是乘法,又可以用于定义指针,还可以用于指针的间接是乘法,又可以用于定义指针,还可以用于指针的间接引用(引用(“*”的第三种用途)。的第三种用途

5、)。int a=4;int*ip=&a;cout*ipendl;/间接引用指针间接引用指针l“*”放在可执行语句中的指针之前,称为间接引用操作符。放在可执行语句中的指针之前,称为间接引用操作符。l“*”放在指针定义中时,称为指针定义符。放在指针定义中时,称为指针定义符。l间接引用的指针既可用于右值,也可用于左值。间接引用的指针既可用于右值,也可用于左值。*ip=58;cout&ipendl;/输出:输出:58例例:输入输入a和和b两个整数,按先大后小的顺序输两个整数,按先大后小的顺序输出出a和和b(用指针变量处理用指针变量处理)。l#include lusing namespace std;l

6、int main()ll int*p1,*p2,*p,a,b;l cinab;/输入两个整数输入两个整数l p1=&a;/使使p1指向指向al p2=&b;/使使p2指向指向bl if(ab)/如果如果ab就使就使p1与与p2的值交换的值交换l l p=p1;/将将p1的指向与的指向与p2的指向交换的指向交换l p1=p2;l p2=p;l l couta=a b=bendl;l coutmax=*p1 min=*p2endl;l return 0;l6.2.4 指针变量的地址指针变量的地址l l指针也是变量,是变量就有内存地址,所指针也是变量,是变量就有内存地址,所指针也是变量,是变量就有内

7、存地址,所指针也是变量,是变量就有内存地址,所以指针也有地址。以指针也有地址。以指针也有地址。以指针也有地址。l#include lusing namespace std;lint main()ll int a=18;l int*ip=&a;l coutaendl;l coutipendl;l cout&aendl;l cout*ipendl;l cout&ipendl;l return 0;l结果:180 x22ff740 x22ff74180 x22ff70 6.2.5 指针运算指针运算l指针可以进行加减运算。指针可以进行加减运算。l指针加减整数的操作表示空间位置上的挪动,指针加减整数的操

8、作表示空间位置上的挪动,但是但是挪动的字节数与其数据类型相关挪动的字节数与其数据类型相关:对对float指针加指针加6实际增加了实际增加了24个字节。个字节。对对long int指针加指针加5实际增加了实际增加了20个字节。个字节。对对char指针减指针减7实际减少了实际减少了7个字节。个字节。对对double指针减指针减2实际减少了实际减少了16个字节。个字节。l同类型的指针可以相互赋值。同类型的指针可以相互赋值。6.2.6 指针作为函数参数指针作为函数参数l函数的参数不仅可以是整型、浮点型、字符函数的参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型。它的作用是型等数据,还可以是指

9、针类型。它的作用是将一个变量的地址传送给被调用函数的形参。将一个变量的地址传送给被调用函数的形参。例例:l对输入的两个整数按大小顺序输出。对输入的两个整数按大小顺序输出。l要求用函数处理,而且用指针类型的数据作要求用函数处理,而且用指针类型的数据作函数参数。函数参数。l#include lusing namespace std;lvoid swap(int*p1,int*p2);/函数的作用是将函数的作用是将*p1的值与的值与*p2的值交换的值交换lint main()ll int*pointer_1,*pointer_2,a,b;l cinab;l pointer_1=&a;/使使point

10、er_1指向指向al pointer_2=&b;/使使pointer_2指向指向bl if(ab)/如果如果ab,使,使*pointer_1和和*pointer_2互换互换l swap(pointer_1,pointer_2);l coutmax=a min=bendl;l return 0;llvoid swap(int*p1,int*p2)ll int temp;l temp=*p1;l *p1=*p2;l *p2=temp;lint temp;temp=*p1;*p1=*p2;*p2=temp;0 x23ff6ca0 x23ff68bpointer_1=&a;pointer_2=&b;0

11、 x23ff6c0 x23ff68pointer_1pointer_20 x23ff6c0 x23ff68p1p2swap(pointer_1,pointer_2);6.3 数组与指针数组与指针6.3.1 数组名数组名l有如下声明:有如下声明:lint a5;l我们把我们把a称为数组,它是一些值的集合。下标称为数组,它是一些值的集合。下标和数组名一起使用,用于标识该集合中的某和数组名一起使用,用于标识该集合中的某个特定的值,如个特定的值,如a0表示数组表示数组a的第的第1个值,个值,a4表示第表示第5个值。个值。la4的类型是整型,但的类型是整型,但a的类型是什么?它所的类型是什么?它所表示的

12、又是什么?表示的又是什么?l一个合乎逻辑的答案是一个合乎逻辑的答案是a表示整个数组,但事实并非如此。表示整个数组,但事实并非如此。l在在C/C+中,几乎所有中,几乎所有使用数组名的表达式使用数组名的表达式里的数组名的里的数组名的值值值值是一个是一个指针常量指针常量指针常量指针常量,也就是,也就是数组第一个元素数组第一个元素数组第一个元素数组第一个元素的地址。它的类型的地址。它的类型取决于数组元素的类型:如果它们是取决于数组元素的类型:如果它们是int类型,那么数组名的类型,那么数组名的类型就是类型就是“指向指向int的指针常量的指针常量”即即“int*”。l例:例:l#include lusi

13、ng namespace std;lint main()ll int a5=1,2,3,4,5;l int b=a;ll注意:只有当数组名在表达式中使用时,编译器才为它产生注意:只有当数组名在表达式中使用时,编译器才为它产生一个指针常量,不要理解为数组名就是指针。一个指针常量,不要理解为数组名就是指针。编译错误:编译错误:invalid conversion from int*to intl只有在两种场合下,数组名不用指针常量来表示只有在两种场合下,数组名不用指针常量来表示就就是当数组名作为是当数组名作为sizeof操作符或单目操作符操作符或单目操作符&的操作数的操作数时。时。l对于对于int

14、 a5;lsizeof(a)返回整个数组的长度返回整个数组的长度l&a 返回一个指向数组返回一个指向数组a的指针,类型为的指针,类型为int(*)5,即指向有即指向有5个整型元素的一维数组的指针。个整型元素的一维数组的指针。l由上面也可看出,数组名并非就是指针。由上面也可看出,数组名并非就是指针。6.3.2 下标操作符下标操作符 l 实际上是实际上是变址运算符变址运算符。程序编译时,。程序编译时,C+编译系统编译系统会将其转换为会将其转换为*(x+i)的形式,的形式,x表示表示 前的操作数。前的操作数。如如ai *(a+i)l也就是说下标操作其实进行的就是指针运算,即将数也就是说下标操作其实进

15、行的就是指针运算,即将数组首元素的地址加上相对位移量,然后取该单元中的组首元素的地址加上相对位移量,然后取该单元中的内容。内容。l同理同理bij *(bi+j)*(*(b+i)+j)其含义后再讨论。其含义后再讨论。6.3.3 用指针操作数组用指针操作数组l前面讲了,一维数组前面讲了,一维数组a在表达式中值为数组首元素的在表达式中值为数组首元素的地址,类型为地址,类型为int*,而,而ai等同等同*(a+i),那么下面几,那么下面几个操作等价就很好理解了。个操作等价就很好理解了。lint*p=a;/a、p类型一致类型一致lail*(a+i)lpil*(p+i)l也就是说我们可以定义一个和数组首元

16、素类型一致也就是说我们可以定义一个和数组首元素类型一致的指针变量来操作数组。的指针变量来操作数组。l相应地第相应地第i个元素的地址:个元素的地址:l&aila+ilp+il&pil l注意:注意:la+;/lp+;/例:数组的求和例:数组的求和l#include lusing namespace std;lint main()ll int sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;l int a=1,4,5,7,9,2;l int*p=a;l int size=sizeof(a)/sizeof(a0);/数组元素的个数数组元素的个数l for(int i=0;isi

17、ze;+i)/方法方法1l l sum1+=ai;l l for(int i=0;isize;+i)/方法方法2l l sum2+=pi;l l for(int i=0;isize;+i)/方法方法3l l sum3+=*(p+);l l p=a;l for(int i=0;isize;+i)/方法方法4l l sum4+=*(p+i);l l for(int i=0;isize;+i)/方法方法5l l sum5+=*(a+i);l l coutsum1 sum2 sum3 l sum4 sum5endl;l return 0;l6.3.2 用指针变量作函数参数接收数组地址用指针变量作函数参

18、数接收数组地址l前面已经多次强调:前面已经多次强调:数组名代表数组首元素数组名代表数组首元素的地址。用数组名作函数的参数,传递的是的地址。用数组名作函数的参数,传递的是数组首元素的地址。很容易推想:数组首元素的地址。很容易推想:用指针变用指针变量作函数形参,同样可以接收从实参传递来量作函数形参,同样可以接收从实参传递来的数组首元素的地址。的数组首元素的地址。例:将例:将10个整数按由小到大的顺序排列。个整数按由小到大的顺序排列。l#include lusing namespace std;lvoid select_sort(int*p,int n);lint main()ll int a10;

19、l coutenter the originl array:endl;l for(int i=0;iai;l coutendl;l select_sort(a,10);/函数调用,数组名作实参函数调用,数组名作实参l coutthe sorted array:endl;l for(int i=0;i10;i+)/输出输出10个已排好序的数个已排好序的数l coutai ;l coutendl;l return 0;llvoid select_sort(int*p,int n)/用指针变量作形参用指针变量作形参ll int k,t;l for(int i=0;in-1;i+)l l k=i;l

20、for(int j=i+1;jn;j+)l if(*(p+j)*(p+k)k=j;/用指针法访问数组元素用指针法访问数组元素l t=*(p+k);l *(p+k)=*(p+i);l *(p+i)=t;l l6.3.3 多维数组与指针多维数组与指针lC+语言语言实际上是把多维数组当成一维数组来处理实际上是把多维数组当成一维数组来处理的的。l比如,现在有一个比如,现在有一个int型的二维数组型的二维数组a34,计算机,计算机认为这是一个一维的数组认为这是一个一维的数组a3,数组的三个元素分,数组的三个元素分别是别是a0、a1和和a2。其中每个元素又是一个一维。其中每个元素又是一个一维数组,例如数组

21、,例如a0又是一个包含又是一个包含a00,a01,a02和和a03共共4个元素的数组。如果我们要引用个元素的数组。如果我们要引用数组元素数组元素a12,可以首先根据下标,可以首先根据下标1找到找到a1,然,然后在后在a1中找到第中找到第3个元素个元素a12。int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;12345678910 11 12a0a1a2ala在表达式中的值在表达式中的值为数组为数组首元素首元素的地址。的地址。la的类型的类型取决于数组元素的类型取决于数组元素的类型,而数组,而数组a的元素为

22、的元素为包含包含4个整型元素的一维数组,则个整型元素的一维数组,则a的类型为指向的类型为指向包包含含4个整型元素的一维数组个整型元素的一维数组的指针的指针int(*)4la+1 数组数组a的第的第2个元素(子数组)的地址。个元素(子数组)的地址。l*(a+1)即即a1,第,第2个子数组的个子数组的“数组名数组名”。注:子数组的数组名其实并不存在,*(a+1)实际上返回一个指向第2个子数组首元素的指针,类型为int*,这与数组名在概念上是一致的,为便于理解,可以认为a1是第2个子数组的数组名。l*(a+1)+1 第第2个子数组第个子数组第2个元素的地址。个元素的地址。l*(*(a+1)+1)即即

23、a11,第,第2个子数组第个子数组第2个个元素的值。元素的值。例:输出二维数组各元素的值。例:输出二维数组各元素的值。l#include lusing namespace std;lint main()ll int a34=1,3,5,7,9,11,13,15,17,19,21,23;l int*p;/p是基类型为整型的指针变量是基类型为整型的指针变量l for(p=a0;pa0+12;p+)l cout*p;l coutendl;l return 0;l例:输出二维数组任一行任一列元素的值。例:输出二维数组任一行任一列元素的值。l#include lusing namespace std;l

24、int main()ll int a34=1,3,5,7,9,11,13,15,17,19,21,23;l int(*p)4,i,j;l cinij;l p=a;/a的类型也为的类型也为int(*p)4l cout*(*(p+i)+j)endl;l return 0;l例:输出二维数组各元素的值。用一个函数实现输出例:输出二维数组各元素的值。用一个函数实现输出l#include lusing namespace std;lvoid output(int(*p)4);lint main()ll int a34=1,3,5,7,9,11,13,15,17,19,21,23;l output(a);

25、/多维数组名作函数参数多维数组名作函数参数l return 0;llvoid output(int(*p)4)/形参是指向一维数组的指针变量形参是指向一维数组的指针变量ll int i,j;l for(i=0;i3;i+)l l for(j=0;j4;j+)l cout*(*(p+i)+j);l coutendl;l l此函数的形参是否合适,怎么改进?l#include l#include lvoid output(int(*p)4,int);lint main()ll int a34=1,3,5,7,9,11,13,15,17,19,21,23;l output(a,3);/多维数组名作函数

26、参数多维数组名作函数参数l return 0;lvoid output(int(*p)4,int n)/形参是指向一维数组的指针变形参是指向一维数组的指针变量量 int m=sizeof(p0)/sizeof(p00);int i,j;for(i=0;in;i+)for(j=0;jm;j+)coutsetw(6)*(*(p+i)+j);coutendl;coutendl;6.4 字符串与指针字符串与指针l在在C+中可以用中可以用3种方法访问一个字符串。种方法访问一个字符串。1.用字符数组存放一个字符串用字符数组存放一个字符串l定义一个字符数组并初始化,然后输出其中的字符串。定义一个字符数组并初

27、始化,然后输出其中的字符串。l#include lusing namespace std;lint main()ll char str=I love CHINA!;l coutstrendl;l return 0;l2.用用string变量存放字符串变量存放字符串l定义一个字符串变量并初始化,然后输出其中的字符串。定义一个字符串变量并初始化,然后输出其中的字符串。l#include l#include lusing namespace std;lint main()ll string str=I love CHINA!;l coutstrendl;l return 0;l3.用字符指针指向一个

28、字符串用字符指针指向一个字符串l定义一个字符指针变量并初始化,然后输出它指向的字符串。定义一个字符指针变量并初始化,然后输出它指向的字符串。l#include lusing namespace std;lint main()ll char*str=I love CHINA!;l coutstrendl;l return 0;ll对字符串中字符的存取,可以用下标方法,对字符串中字符的存取,可以用下标方法,也可以用指针方法。也可以用指针方法。l例:将字符串例:将字符串str1复制为字符串复制为字符串str2。l定义两个字符数组定义两个字符数组str1和和str2,再设两个指针,再设两个指针变量变量

29、p1和和p2,分别指向两个字符数组中的有,分别指向两个字符数组中的有关字符,通过改变指针变量的值使它们指向关字符,通过改变指针变量的值使它们指向字符串中的不同的字符,以实现字符的复制。字符串中的不同的字符,以实现字符的复制。l#include lusing namespace std;lint main()ll char str1=I love CHINA!,str220,*p1,*p2;l p1=str1;l p2=str2;l for(;*p1!=0;p1+,p2+)l *p2=*p1;l *p2=0;l p1=str1;l p2=str2;l coutstr1 is:p1endl;l c

30、outstr2 is:p2endl;l return 0;l6.5 函数与指针函数与指针6.5.1 用函数指针变量调用函数用函数指针变量调用函数l指针变量也可以指向一个函数。一个函数在指针变量也可以指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数入编译时被分配给一个入口地址。这个函数入口地址就称为口地址就称为函数的指针函数的指针。可以用一个指针。可以用一个指针变量指向函数,然后通过该指针变量调用此变量指向函数,然后通过该指针变量调用此函数。函数。l指向函数的指针变量的一般定义形式为指向函数的指针变量的一般定义形式为函数类型函数类型(*指针变量名指针变量名)(函数形参表函数形参表);

31、例例:求和中的大者。求和中的大者。l#include lusing namespace std;lint max(int x,int y);/函数声明函数声明lint main()l l int(*p)(int,int);/定义指向函数的指针变量定义指向函数的指针变量pl int a,b,m;l p=max;/使使p指向函数指向函数maxl cinab;l m=p(a,b);l coutmax=my)l z=x;l elsel z=y;l return(z);l*6.5.2 用指向函数的指针作函数参数用指向函数的指针作函数参数l程序例见教材程序例见教材P1876.6 返回指针值的函数返回指针值

32、的函数l一个函数可以返回一个整型值、字符值、实一个函数可以返回一个整型值、字符值、实型值等,也可以返回指针型的数据,即地址。型值等,也可以返回指针型的数据,即地址。l返回指针值的函数简称为返回指针值的函数简称为指针函数指针函数。l定义指针函数的一般形式为定义指针函数的一般形式为 类型名类型名*函数名函数名(参数表列参数表列);l例如例如lint*a(int x,int y);l#include lusing namespace std;lint*fun();lint main()ll int*p;l p=fun();l cout*pendl;l return 0;llint*fun()ll i

33、nt a=8;l return&a;l此程序有问题吗此程序有问题吗?6.7 指针数组和指向指针的指针指针数组和指向指针的指针6.7.1 指针数组的概念指针数组的概念l如果一个数组,其元素均为指针类型数据,该数组如果一个数组,其元素均为指针类型数据,该数组称为称为指针数组指针数组,也就是说,指针数组中的每一个元,也就是说,指针数组中的每一个元素相当于一个指针变量,它的值都是地址。素相当于一个指针变量,它的值都是地址。l一维指针数组的定义形式为一维指针数组的定义形式为类型名类型名*数组名数组名数组长度数组长度;l例如例如int*p4;l可以用指针数组中各个元素分别指向若干个字符串,可以用指针数组中

34、各个元素分别指向若干个字符串,使字符串处理更加方便灵活。使字符串处理更加方便灵活。例:若干字符串按字母顺序(由小到大)输出。例:若干字符串按字母顺序(由小到大)输出。l#include lusing namespace std;lvoid sort(char*,int n);lvoid print(char*,int n);lint main()ll char*name=BASIC,FORTRAN,C+,Pascal,COBOL;l int n=5;l sort(name,n);l print(name,n);l return 0;lvoid sort(char*name,int n)char

35、*temp;int k;for(int i=0;in-1;i+)k=i;for(int j=i+1;j0)k=j;if(k!=i)temp=namei;namei=namek;namek=temp;void print(char*name,int n)for(int i=0;in;i+)coutnameiendl;6.7.2 指向指针的指针指向指针的指针l上一例中,上一例中,name是一个指针数组,它的每一是一个指针数组,它的每一个元素是一个指针型数据个元素是一个指针型数据(其值为地址其值为地址),分,分别指向不同的字符串。数组名别指向不同的字符串。数组名name代表该指代表该指针数组首元素的

36、地址,其类型是针数组首元素的地址,其类型是char*。(数组首元素的类型为指向(数组首元素的类型为指向char类型数据的类型数据的指针,则指针,则name为指向指向为指向指向char类型数据的指类型数据的指针的指针。)针的指针。)l可以设置一个指针变量可以设置一个指针变量p,它指向指针数组的,它指向指针数组的元素。元素。p就是指向指针型数据的指针变量。就是指向指针型数据的指针变量。lp的定义如下:的定义如下:char*(*p);l由于由于*运算符的运算符的结合性是从右到左结合性是从右到左,因此,因此“char*(*p);”可写成可写成char*p;例:指向字符型数据的指针变量。例:指向字符型数

37、据的指针变量。#include using namespace std;int main()char*p;/定义指向字符指针数据的指针变量定义指向字符指针数据的指针变量p char*name=BASIC,FORTRAN,C+,Pascal,COBOL;p=name;cout*pendl;cout*(*(p+1)+3)endl;p=name+2;cout*pendl;/输出输出name2指向的字符串指向的字符串 cout*pendl;/输出输出name2指向的字符串中的第一个字符指向的字符串中的第一个字符6.8 引用引用6.8.1 什么是变量的引用什么是变量的引用l对一个数据可以使用对一个数据可

38、以使用“引用引用”(reference),这是这是C+对对C的一个重要扩充,引用是一种新的一个重要扩充,引用是一种新的变量类型,它的作用是的变量类型,它的作用是为一个变量起一个为一个变量起一个别名别名。l为建立引用,先写上目标的类型,后跟引用为建立引用,先写上目标的类型,后跟引用运算符运算符“&”,然后是引用的名字。,然后是引用的名字。int a;int&r=a;/声明声明r是对整数的引用,初始化为引用是对整数的引用,初始化为引用a。注:注:l引用在声明时必须被初始化引用在声明时必须被初始化,引用的对象需已有,引用的对象需已有声明或定义。声明或定义。l引用一旦初始化,它就维系在目标上,再也不分

39、引用一旦初始化,它就维系在目标上,再也不分开。开。l引用不是值,引用不是值,不占存储空间不占存储空间,声明引用时,目标,声明引用时,目标的存储状态不会改变。的存储状态不会改变。l如果程序寻找引用的地址,它只能找到所引用的如果程序寻找引用的地址,它只能找到所引用的目标的地址。目标的地址。l引用运算符只在声明的时候使用,它放在类型的引用运算符只在声明的时候使用,它放在类型的后面,任何其它后面,任何其它“&”的使用都是地址操作符。的使用都是地址操作符。6.8.2 引用的简单使用引用的简单使用l#include l#include lusing namespace std;lint main()ll

40、int a=10;l int&b=a;/声明声明b是是a的引用的引用l a=a*a;/a的值变化了,的值变化了,b的值也应一起变化的值也应一起变化l coutasetw(6)bendl;l b=b/5;/b的值变化了,的值变化了,a的值也应一起变化的值也应一起变化l coutbsetw(6)aendl;l return 0;l6.8.3 引用作为函数参数引用作为函数参数l函数参数的传递方式可分为按值传递和按引函数参数的传递方式可分为按值传递和按引用传递两种。用传递两种。l按引用传递时,引用参数是函数调用中相应按引用传递时,引用参数是函数调用中相应实参的别名。实参的别名。l利用按引用传递,被调用函数可以直接访问利用按引用传递,被调用函数可以直接访问调用者的数据,并且如果被调用函数需要,调用者的数据,并且如果被调用函数需要,还可以修改这些数据。还可以修改这些数据。l#includelusing namespace std;lvoid fun(int&);lint main()llint x=1;lfun(x);lcoutxendl;lreturn 0;llvoid fun(int&a)ll+a;l

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁