程序设计基础w07-讨论-4-数组-指针-函数课件.ppt

上传人(卖家):三亚风情 文档编号:3529171 上传时间:2022-09-12 格式:PPT 页数:109 大小:2.05MB
下载 相关 举报
程序设计基础w07-讨论-4-数组-指针-函数课件.ppt_第1页
第1页 / 共109页
程序设计基础w07-讨论-4-数组-指针-函数课件.ppt_第2页
第2页 / 共109页
程序设计基础w07-讨论-4-数组-指针-函数课件.ppt_第3页
第3页 / 共109页
程序设计基础w07-讨论-4-数组-指针-函数课件.ppt_第4页
第4页 / 共109页
程序设计基础w07-讨论-4-数组-指针-函数课件.ppt_第5页
第5页 / 共109页
点击查看更多>>
资源描述

1、排错涉及到一种逆向推理,就像侦破一个杀人谜案。有些不可能的事情发生了,而仅有的信息就是它确实发生了!因此,我们必须从结果出发,逆向思考,去发现原因。有时你“看到的代码”实际上是你自己的意愿,而不是你实际写出来的东西。离开它一小段时间能够松驰你的误解,帮助代码显出其本来面目。程序设计实践现实就是这样,总是存在许多程序错误,需要通过测试来发现,通过排错去纠正。关于数组、指针、函数的综合讨论3任务:姓名排序任务:姓名排序n电视歌手大奖赛开赛报名时,由于人数较多,一些参电视歌手大奖赛开赛报名时,由于人数较多,一些参赛信息需要及时录入计算机并用计算机进行管理。赛信息需要及时录入计算机并用计算机进行管理。

2、n其中一个很重要的工作就是:要按选手姓名(汉语拼其中一个很重要的工作就是:要按选手姓名(汉语拼音)排序后编号,以决定选手比赛的顺序。音)排序后编号,以决定选手比赛的顺序。n请你编程实现对姓名拼音串按英文字典顺序排序的程请你编程实现对姓名拼音串按英文字典顺序排序的程序。序。n为测试程序,假定共有为测试程序,假定共有10名选手,选手姓名拼音最长名选手,选手姓名拼音最长不超过不超过20个英文字符,且中间无空格。个英文字符,且中间无空格。4#include#include using namespace std;using namespace std;int mainint main()()char

3、namelist1020;char namelist1020;for(int i=0;i10;i+)for(int i=0;i10;i+)cout i singer name:;cout i namelisti;cin namelisti;/此处代码省略(见后)用冒泡排序法对姓名进行排序此处代码省略(见后)用冒泡排序法对姓名进行排序for(int i=0;i10;i+)for(int i=0;i10;i+)cout i namelisti endl;cout i namelisti endl;return 0;return 0;5#include#include using namespace

4、 std;using namespace std;int mainint main()()char namelist1020;char namelist1020;for(int i=0;i10;i+)for(int i=0;i10;i+)cout i singer name:;cout i namelisti;cin namelisti;/此处代码省略(见后)用冒泡排序法对姓名进行排序此处代码省略(见后)用冒泡排序法对姓名进行排序for(int i=0;i10;i+)for(int i=0;i10;i+)cout i namelisti endl;cout i namelisti endl;r

5、eturn 0;return 0;6#include#include using namespace std;using namespace std;int mainint main()()char namelist1020;char namelist1020;for(int i=0;i10;i+)for(int i=0;i10;i+)cout i singer name:;cout i namelisti;cin namelisti;/此处代码省略(见后)用冒泡排序法对姓名进行排序此处代码省略(见后)用冒泡排序法对姓名进行排序for(int i=0;i10;i+)for(int i=0;i1

6、0;i+)cout i namelisti endl;cout i namelisti endl;return 0;return 0;7#include#include using namespace std;using namespace std;int mainint main()()char namelist1020;char namelist1020;/数组下标从数组下标从0 0开始!开始!for(int i=0;i10;i+)for(int i=0;i10;i+)cout i singer name:;cout i namelisti;cin namelisti;/此处代码省略(见后

7、)用冒泡排序法对姓名进行排序此处代码省略(见后)用冒泡排序法对姓名进行排序for(int i=0;i10;i+)for(int i=0;i10;i+)cout i namelisti endl;cout i namelisti endl;return 0;return 0;8先看看整数数组的冒泡算法先看看整数数组的冒泡算法for(j=for(j=1 1;j j=5 5;j+);j+)for(i=for(i=1 1;i=;i=6 6-j;i+)-j;i+)if(ai ai+1)if(ai ai+1)p=ai;p=ai;ai=ai+1;ai=ai+1;ai+1=p;ai+1=p;Page 93如何

8、修改成以如何修改成以0为首元素下标?为首元素下标?9改成以改成以0 0为首元素下标为首元素下标for(j=for(j=0 0;j j 5 5;j+);j+)for(i=for(i=0 0;i;i5 5-j;i+)-j;i+)/why not“i6-j”?/why not“i6-j”?if(ai ai+1)if(ai ai+1)p=ai;p=ai;ai=ai+1;ai=ai+1;ai+1=p;ai+1=p;10依样画葫芦依样画葫芦for(j=for(j=0 0;j j 5 5;j+);j+)for(i=for(i=0 0;i;i5 5-j;i+)-j;i+)/why not“i6-j”?/why

9、 not“i6-j”?if(ai ai+1)if(ai ai+1)p=ai;p=ai;ai=ai+1;ai=ai+1;ai+1=p;ai+1=p;for(j=for(j=0 0;j j 9 9;j+);j+)for(i=for(i=0 0;i;i9 9-j;i+)-j;i+)if(if(namelistnamelisti i namelistnamelisti+1)i+1)p=p=namelistnamelisti;i;namelistnamelisti=i=namelistnamelisti+1;i+1;namelistnamelisti+1=p;i+1=p;11for(int i=0;if

10、or(int i=0;i9 9;i;i+)+)/轮轮(遍遍,趟趟)数数=元素数目元素数目-1-1 for(int j=0;jfor(int j=0;j 0)(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpystrcpy(tmp,namelistj);(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);12for(int i=0;ifor(int

11、i=0;i9 9;i;i+)+)for(int j=0;jfor(int j=0;j 0)(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpystrcpy(tmp,namelistj);(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);13for(int i=0;ifor(int i=0;i9 9;i;i+)+)for(int j=0;jfor(

12、int j=0;j 0)(namelistj,namelistj+1)0)/page 345,“strcpy()”/page 345,“strcpy()”char tmp20;char tmp20;strcpystrcpy(tmp,namelistj);(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);字符串元素的特殊交换算法如何按字典逆序来排序姓名呢?如何按字典逆序来排序姓名呢?14如何按字典逆序

13、来排序姓名如何按字典逆序来排序姓名for(int i=0;ifor(int i=0;i9 9;i;i+)+)for(int j=0;jfor(int j=0;j9-i9-i;j;j+)+)if(if(strcmpstrcmp(namelistj,namelistj+1)(namelistj,namelistj+1)0)0)/同前省略同前省略 比较关系符改为小于号,即按字典逆序排序姓名。如何根据用户输入来决定按何种次序排序姓名呢?如何根据用户输入来决定按何种次序排序姓名呢?15n可以用一个变量来记录用户的输入,根据可以用一个变量来记录用户的输入,根据输入选择来判定用户是想正逆排序姓名还输入选择来

14、判定用户是想正逆排序姓名还是想逆序排序姓名。是想逆序排序姓名。n该变量的类型可以是:该变量的类型可以是:布尔型布尔型 bool 整数类型整数类型 int 字符类型字符类型 char。排序准则的动态变化排序准则的动态变化为什么这些类型都可以?假设使用假设使用 char UserInput;来记录用户选择:来记录用户选择:U表示升序,表示升序,D表示降序表示降序16排序准则的动态变化排序准则的动态变化 if(UserInput=D)/Down,if(UserInput=D)/Down,降序排列降序排列if(if(strcmpstrcmp(namelistj,namelistj+1)(namelis

15、tj,namelistj+1)0)0)/交换相邻元素,同前省略交换相邻元素,同前省略 17char UserInput;cout UserInput;/确保输入合法 assert(UserInput=D|UserInput=U);如果输入不合法,则程序会以崩溃的方式退出。如果输入不合法,则程序会以崩溃的方式退出。18for(int i=0;i9;i+)for(int i=0;i9;i+)for(int j=0;j9-i;j+)for(int j=0;j9-i;j+)ifif(UserInput=D)(UserInput=D)ifif(strcmp(namelistj,namelistj+1)0

16、)(strcmp(namelistj,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpy(tmp,namelistj);strcpy(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);程序代码还能程序代码还能更更简简捷一些捷一些吗?吗?19程序代码的简化程序代码的简化 if(UserInput=D)if(

17、UserInput=D)if(strcmp(namelistj,namelistj+1)0)if(strcmp(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpy(tmp,namelistj);strcpy(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);接连两个接连两个ifif判断,可合成一个!判断,可合成一个!if(cond_1)if(con

18、d_1)if(cond_2)if(cond_2)/./.if(cond_1&if(cond_1&cond_2)cond_2)/./.20for(int i=0;i9;i+)for(int i=0;i9;i+)for(int j=0;j9-i;j+)for(int j=0;j9-i;j+)if(if(UserInput=D)UserInput=D)&(strcmp(namelistj,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpy(

19、tmp,namelistj);strcpy(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);程序代码还能做进一步的简化吗?程序代码还能做进一步的简化吗?21for(int i=0;i9;i+)for(int i=0;i9;i+)for(int j=0;j9-i;j+)for(int j=0;j9-i;j+)if(if(UserInput=D)UserInput=D)&(strcmp(namelist

20、j,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpy(tmp,namelistj);strcpy(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);怎么简化?怎么简化?22for(int i=0;i9;i+)for(int i=0;i9;i

21、+)for(int j=0;j9-i;j+)for(int j=0;j9-i;j+)if(if(UserInput=D)UserInput=D)&(strcmp(namelistj,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpy(tmp,namelistj);strcpy(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcp

22、y(namelistj+1,tmp);strcpy(namelistj+1,tmp);怎么定义怎么定义Swap()Swap()函数函数呢?呢?Swap(namelistj,namelistj+1);Swap(namelistj,namelistj+1);Swap(Swap(namelistnamelistj,j,namelistnamelistj+1);j+1);23Swap()Swap()函数的定义函数的定义n注意到:调用该函数时,实参是注意到:调用该函数时,实参是 namelistjnamelistj和和 namelistj+1namelistj+1,它们分别对应二维数组变量,它们分别对应

23、二维数组变量 namelistnamelist的的第第j“j“行行”和和第第j+1“j+1“行行”n二维数组的二维数组的“行变量行变量”对应的是一个数组:对应的是一个数组:void Swap(void Swap(charchar first first ,charchar second second ););24void Swap(char first,char second)char tmp20;strcpy(tmp,first);strcpy(first,second);strcpy(second,tmp);if(UserInput=D)&(strcmp(namelistj,namelis

24、tj+1)0)char tmp20;char tmp20;strcpy(tmp,namelistj);strcpy(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);25for(int i=0;i9;i+)for(int j=0;j9-i;j+)if(UserInput=D)&(strcmp(namelistj,namelistj+1)0)SwapSwap(namelistj,namelistj+1)

25、;26依样画葫芦依样画葫芦for(j=0;j5;j+)for(j=0;j5;j+)for(i=0;i5-j;i+)for(i=0;i5-j;i+)if(ai ai+1)if(ai ai+1)p=ai;p=ai;ai=ai+1;ai=ai+1;ai+1=p;ai+1=p;for(j=0;j5;j+)for(j=0;j5;j+)for(i=0;i5-j;i+)for(i=0;i5-j;i+)if(ai ai+1)if(ai ai+1)Swap(ai,ai+1);Swap(ai,ai+1);Page 9327Swap()Swap()函数的定义函数的定义n注意到:调用该函数时,程序中的实参是注意到:调

26、用该函数时,程序中的实参是 aiai和和 ai+1ai+1,它们分别对应一维数组变量,它们分别对应一维数组变量a a的第的第i i和第和第i+1i+1个元素个元素n一维整数数组的元素,是一个整数,其类一维整数数组的元素,是一个整数,其类型是整数类型型是整数类型n故有故有void Swap(void Swap(intint first,first,intint second);second);依样画葫芦依样画葫芦28#include using namespace std;void Swap(void Swap(intint first,first,intint second)second)in

27、tint p;p;p=first;p=first;first=second;first=second;second=p;second=p;int main()int i,j,p,a6;memset(a,0,sizeof(a);for(i=0;i6;i+)cout 请输入待排序的数a i ai;依样画葫芦依样画葫芦29for(j=0;j5;j+)for(i=0;i5-j;i+)if(ai ai+1)Swap(ai,ai+1);for(i=0;i6;i+)cout ai endl;return 0;依样画葫芦依样画葫芦可惜啊!程序结果并不正确!30BUGBUG(问题)在哪里?(问题)在哪里?voi

28、d Swap(int first,int second)int p;p=first;first=second;second=p;变量first和second是函数Swap的形式参数,该函数被调用时,实参的值是被赋值给形参的,即相当于是复制了一份。所以,在函数Swap中交换的是“复制品”之间内容的交换,并不影响实参的内容(值)!31验证一下验证一下#include using namespace std;void Swap(int first,int second)int p;p=first;first=second;second=p;int main()int a=3,b=4;cout Bef

29、ore calling Swap(),a=a ,b=b endl;Swap(a,b);cout After calling Swap(),a=a ,b=b endl;return 0;32void Swap(int first,int second)cout&first=&first ,&second=&second endl;/同前省略int main()int a=3,b=4;cout&a=&a ,&b=&b endl;/同前省略进一步验证进一步验证33比较实参与形参的内存单元比较实参与形参的内存单元34如何改正这个如何改正这个BUGBUG(问题)(问题)void Swap(int*fir

30、st,int*second)int p;p=*first;*first=*second;*second=p;/in main()for(j=0;j5;j+)for(i=0;i5-j;i+)if(ai ai+1)Swap(&(ai),&(ai+1);35为什么这样为什么这样BUGBUG就被去掉了?就被去掉了?firstsecond3849aiai+10X22FF400X22FF440X22FF400X22FF443849aiai+10X22FF400X22FF44int p=*first;*first=*second;*second=p;0X22FF400X22FF4449aiai+10X22F

31、F400X22FF44?0X22FF400X22FF440X22FF400X22FF400X22FF440X22FF440X22FF400X22FF400X22FF440X22FF400X22FF44firstsecondfirstsecondfirstsecond函数调用前函数调用前函数调用时函数调用时函数调用函数调用中中3836为什么这样为什么这样BUGBUG就被去掉了?就被去掉了?firstsecond3849aiai+10X22FF400X22FF440X22FF400X22FF443849aiai+10X22FF400X22FF44int p=*first;*first=*secon

32、d;*second=p;0X22FF400X22FF44aiai+10X22FF400X22FF44?0X22FF400X22FF440X22FF400X22FF400X22FF440X22FF440X22FF400X22FF400X22FF440X22FF400X22FF44firstsecondfirstsecondfirstsecond函数调用前函数调用前函数调用时函数调用时函数调用函数调用中中494937为什么这样为什么这样BUGBUG就被去掉了?就被去掉了?firstsecond3849aiai+10X22FF400X22FF440X22FF400X22FF443849aiai+10

33、X22FF400X22FF44int p=*first;*first=*second;*second=p;0X22FF400X22FF44aiai+10X22FF400X22FF44?0X22FF400X22FF440X22FF400X22FF400X22FF440X22FF440X22FF400X22FF400X22FF440X22FF400X22FF44firstsecondfirstsecondfirstsecond函数调用前函数调用前函数调用时函数调用时函数调用函数调用中中493838为什么这样为什么这样BUGBUG就被去掉了?就被去掉了?firstsecond3849aiai+10X

34、22FF400X22FF440X22FF400X22FF443849aiai+10X22FF400X22FF44int p=*first;*first=*second;*second=p;?aiai+10X22FF400X22FF44?0X22FF400X22FF44?0X22FF400X22FF440X22FF400X22FF440X22FF400X22FF44firstsecondfirstsecondfirstsecond函数调用前函数调用前函数调用时函数调用时函数调用函数调用后后493839for(int i=0;i9;i+)for(int j=0;j9-i;j+)if(UserInp

35、ut=D)&(strcmp(namelistj,namelistj+1)0)SwapSwap(namelistj,namelistj+1);程序代码还能做进一步的简化吗?程序代码还能做进一步的简化吗?回到 姓名排序(二维数组)问题上来40strcmp()strcmp()的返回值是什么?的返回值是什么?#include#include using namespace std;using namespace std;int main()int main()cout strcmp(AAA,BBB)endl;cout strcmp(AAA,BBB)endl;cout strcmp(DDD,BBB)en

36、dl;cout strcmp(DDD,BBB)endl;return 0;return 0;程序输出为:1141for(int i=0;i9;i+)for(int j=0;j9-i;j+)ifif(UserInput=D)&(strcmp(namelistj,namelistj+1)=-1)SwapSwap(namelistj,namelistj+1);ifif(UserInput=U)&(strcmp(namelistj,namelistj+1)=1)SwapSwap(namelistj,namelistj+1);int UserInput?042/.int UserInput;cin Us

37、erInput;assert(UserInput=-1|UserInput=1);for(int i=0;i9;i+)for(int j=0;j9-i;j+)ifif(strcmp(namelistj,namelistj+1)=UserInput)/两种排序准则合并在一起处理 SwapSwap(namelistj,namelistj+1);/.抽取两种排序准则的共性思考题:如果用户仍然希望使用U和D表示升序和降序,程序应如何修改?43下面,任务又改变啦!领导和观众都强烈要求按歌手类型分开比赛,以保证公平竞争。即,会有多个不同人数的姓名数组需要排序处理。程序该如何修改呢?如通俗歌手有20人,美声

38、歌手有15人。44难道是这样么?不过难道是这样么?不过有点有点for(int i=0;i19;i+)/通俗歌手排序for(int j=0;j19-i;j+)if(strcmp(NL_1j,NL_1j+1)=UserInput)SwapSwap(NL_1j,NL_1j+1);for(int i=0;i14;i+)/美声歌手排序for(int j=0;j14-i;j+)if(strcmp(NL_2j,NL_2j+1)=UserInput)SwapSwap(NL_2j,NL_2j+1);45冒泡泡的函数上场啦冒泡泡的函数上场啦Void bubble()for(int i=0;inum-1;i+)fo

39、r(int j=0;jnum-1-i;j+)if(strcmp(NLj,NLj+1)=UserInput)SwapSwap(NLj,NLj+1);/.bubble(NL_1,20,UserInput);bubble(NL_2,15,UserINput);46void bubble(int a,int num)for(int j=0;jnum-1;j+)for(int i=0;inum-1-j;i+)if(ai ai+1)Swap(&(ai),&(ai+1);依样画葫芦依样画葫芦Page 93示例修改示例修改47另一种常见的定义方式另一种常见的定义方式void bubble(int*a,int

40、num)for(int j=0;jnum-1;j+)for(int i=0;inum-1-j;i+)if(ai ai+1)Swap(&(ai),&(ai+1);编译器认为上述两种写法是相同的编译器认为上述两种写法是相同的Page 93示例修改示例修改48如果排序准则也要求动态设定如果排序准则也要求动态设定void bubble(int*a,int num,int order)for(int j=0;jnum-1;j+)for(int i=0;inum-1-j;i+)if(ai ai+1)Swap(&(ai),&(ai+1);依样画葫芦依样画葫芦上述函数应该如何修改其实现呢?上述函数应该如何修改

41、其实现呢?Page 93示例修改示例修改49回顾一下姓名排序代码回顾一下姓名排序代码Void bubble()for(int i=0;inum-1;i+)for(int j=0;jnum-1-i;j+)if(strcmp(NLj,NLj+1)=UserInput)SwapSwap(NLj,NLj+1);Page 93示例修改示例修改50void bubble(int*a,int num,int order)for(int j=0;jnum-1;j+)for(int i=0;inum-1-j;i+)if(int_cmp(ai,ai+1)=order)Swap(&(ai),&(ai+1);依样画葫

42、芦依样画葫芦Page 93示例修改示例修改51int_cmp(int,int)int_cmp(int,int)的实现的实现int int_cmp(int a,int b)if(a b)return 1;return 0;/完全参照 strcmp 的功能实现Page 93示例修改示例修改52为什么不这样为什么不这样实现呢?实现呢?bool int_cmp(int a,int b,int order)if(a b)return order=1;return false;/V1.0Page 93示例修改示例修改53为什么不这样为什么不这样实现呢?实现呢?bool int_cmp(int a,int

43、b,int order)if(a b)&(order=1)return true;return false;/V2.0Page 93示例修改示例修改54为什么不这样为什么不这样实现呢?实现呢?bool int_cmp(int a,int b,int order)if(a b)&(order=1)return true;return false;/V3.0Page 93示例修改示例修改55为什么不这样为什么不这样实现呢?实现呢?bool int_cmp(int a,int b,int order)return(a b)&(order=1);/V4.0Page 93示例修改示例修改56void b

44、ubble(int*a,int num,int order)for(int j=0;jnum-1;j+)for(int i=0;inum-1-j;i+)if(int_cmp(ai,ai+1,order)Swap(&(ai),&(ai+1);你还想到怎么修改上面的代码?你还想到怎么修改上面的代码?Page 93示例修改示例修改(未完持续)数组与指针int main()int a14=1,2,3,a25=1,2,1,2,9;int*p=a1,*q;/注意指针q的定义方式for(int i=0;i4;i+)cout pi =*(p+i);cout=a2;p-)cout *p ;/指针用作循环变量co

45、ut endl;q=a2;for(;qa2+5;q+)cout *q ;cout endl;p=a1;/数组变量可以直接赋值给指针变量cout p=p a1=a1 endl;p=a2;cout p=p ,a2 =a2 endl;cout p+1=p+1 ,a2+1 =a2+1 endl;cout *(p+2)=*(p+2),p2 =p2 endl;cout *(a2+2)=*(a2+2),a22=a22 endl;return 0;/pointer-array-1.cpp58参考输出5960数组与指针#include using namespace std;int main()int a14=

46、1,2,3,a25=1,2,1,2,9;int*p=a1,*q;/指针变量与数组变量的“大小”是不同的cout sizeof(a1)=sizeof(a1)endl;cout sizeof(a2)=sizeof(a2)endl;cout sizeof(p)=sizeof(p)endl;cout sizeof(q)=sizeof(q)endl;#ifdef SHOW_ERRORa1=q;/数组变量不能接受赋值a2=p;#endifreturn 0;/pointer-array-2.cpp61参考输出6263#include using namespace std;void test_1(int a

47、,int len)/数组变量作函数参数cout test_1():a=a ,len=len endl tt;for(int i=0;ilen;i+)cout ai =*(a+i);cout endl;void test_2(int*a,int len)/指针变量作函数参数cout test_2():a=a ,len=len endl tt;for(int i=0;ilen;i+)cout ai =*(a+i);cout endl;数组与指针64int main()int a14=1,2,3;int a25=1,2,1,2,9;cout main():a1=a1 ,a2=a2 endl;test

48、_1(a1,4);test_1(a2,5);test_2(a1,4);test_2(a2,5);int*p=a2;test_1(p,2);test_2(p,3);return 0;/pointer-array-3.cpp数组与指针65参考输出6667数组与指针#include using namespace std;void test_3(charchar a,int len)cout test_3():a=a ,len=len endl tt;for(int i=0;ilen;i+)cout ai =*(a+i);cout endl;void test_4(charchar*a,int le

49、n)cout test_4():a=a ,len=len endl tt;for(int i=0;ilen;i+)cout ai =*(a+i);cout endl;68数组与指针int main()char*name1=XXX;/这是初始化,不是赋值!char name2=tsinghua;char name310=computer;name1=name1=J0X-?;/OK!改变字符指针变量的值/name2=YYY;name3=ZZZ;ERROR!/(数组形式的)字符串赋值,必须使用 strcpy 函数!test_3(name1,4);test_4(name1,4);test_3(name

50、2,8);test_4(name2,8);test_3(name3,8);test_4(name3,8);test_3(name3,10);test_4(name3,10);test_3(name3,3);test_4(name3,3);return 0;/pointer-array-4.cpp注意代码中关于注意代码中关于 name1=“J0X-?”;name1=“J0X-?”;的说明。的说明。“J0X-?”J0X-?”是一个常量字符串,它也对应一个地是一个常量字符串,它也对应一个地址值,所以语句址值,所以语句 name1=“J0X-?”;name1=“J0X-?”;的意思是:的意思是:将存放

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(程序设计基础w07-讨论-4-数组-指针-函数课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|