优质计算机科学与技术系_第1页
优质计算机科学与技术系_第2页
优质计算机科学与技术系_第3页
优质计算机科学与技术系_第4页
优质计算机科学与技术系_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、1/C语言程序设计计算机科学与技术系2/第二十二 指针进阶(二) 3/学习目标能够定义并使用指针数组和指向指针的指针理解指向函数的指针的意义4/11.1 布袋中的彩色球 11.1.1 程序解析11.1.2 指针数组的概念11.1.3 指向指针的指针11.1.4 用指针数组处理多个字符串11.1.5 命令行参数 5/11.1.1 程序解析例11-1 已知一个不透明的布袋里装有红、蓝、黄、绿、紫同样大小的圆球各一个,现从中一次抓出两个,问可能抓到的是什么颜色的球?6/程序解析例11-1 源程序#includeint main(void) char *color5 = red, blue, yell

2、ow, green, purple; /* 初始化 */ int count = 0, i, j; for(i = 0; i = 4; i+) /* i代表第一个球对应的颜色下标 */ for(j = 0; j = 4; j+) /* j代表第二个球对应的颜色下标 */ if(i = j) continue; /* 两个球不能同色 */ count +; printf(%6d, count); printf(%10s %10sn, colori, colorj); return 0; 1 red blue 2 red yellow 3 red green 4 red purple 5 blue

3、 yellow 6 blue green 7 blue purple 8 yellow green 9 yellow purple 10 green purple指针数组7/11.1.2 指针数组的概念char *color5;类型名 *数组名数组长度数组元素是指针类型,用于存放内存地址int a10;a是一个数组,它有10个元素每个元素的类型都是整型char *color5;color是一个数组,它有5个元素每个元素的类型都是字符指针指针数组的概念char *color5 = red, blue, yellow, green, purple;color是一个数组,它有5个元素每个元素的类型都

4、是字符指针数组元素可以处理字符串对指针数组元素的操作相当于对同类型指针变量的操作printf(%10s %10sn, colori, colorj);使用指针数组输出5种颜色的英文名称#include int main(void) int i; char *color5 = red, blue, yellow, green, purple, *tmp; for(i = 0; i 5; i+) /* 输出字符串的地址和内容*/ printf(%x, %sn, colori, colori); tmp = color0; /* 交换color0与color4*/ color0 = color4;

5、color4 = tmp; printf(color0:%s, color4:%sn, color0, color4); return 0;420064, red42005c, blue420054, yellow42004c, green420044, purplecolor0:purple, color4:red10/交换color0与color4的值 例11-2 图示11.1.3 指向指针的指针示例例11-3 改写例11-1,用指向指针的指针实现。 #includeint main(void) char *color5 = red, blue, yellow, green, purple

6、; char *pc = color; int count = 0, i, j; for(i = 0; i = 4; i+) for(j = 0; j = 4; j+) if(i = j) continue; count+; printf( %6d, count ); printf( %10s %10sn, colori, colorj ); return 0;指向指针的指针*(pc + i), *(pc + j)12/指向指针的指针示例分析char *color5 = red, blue, yellow, green, purple;char *pc = color;printf( %10s

7、 %10sn, *(pc + i), *(pc + j) );pc: color 或者&color0*pc: color0: red*(pc+i) : colori*color0: r *pc: *color0: r 13/指向指针的指针定义指向指针的指针(二级指针) 类型名 *变量名int a = 10;int *p = &a;int *pp = &p; &apa10&ppp*p*pp*pp&apaa10&pappa*ppa*pa&bpbb20&pbppb*ppb*pbpaappa&a10&pb*ppb*pa&bpbb20&pappb*ppa*pbpaappa&b10&pb*ppa*pb&a

8、pbb20&pappb*ppb*papaappa&b20&pb*ppa*pb&apbb10&pappb*ppb*pa例11-4int a = 10, b = 20, t;int *pa = &a, *pb = &b, *pt;int *ppa = &pa, *ppb = &pb, *ppt;操作(1):ppt = ppb; ppb = ppa; ppa = ppt; 操作(2):pt = pb; pb = pa; pa = pt; 操作(3):t = b; b = a; a = t; 15/11.1.4 用指针数组处理多个字符串处理多个字符串二维字符数组char ccolor 7 = red,

9、 blue, yellow, green, purple;指针数组char *pcolor = red, blue, yellow, green, purple;使用指针数组更节省内存空间1. 用指针数组处理多个字符串排序例11-5 将5个字符串从小到大排序后输出。#include int main(void) int i; int a5 = 6, 5, 2, 8, 1; void fsort( int a , int n ); fsort( a, 5 ); for(i = 0; i 5; i+) printf(%d , ai); return 0; #include int main(voi

10、d) int i; char *pcolor5= red, blue, yellow, green, purple ; void fsort(char *color , int n); fsort( pcolor, 5 ); for(i = 0; i 5; i+) printf(%s , pcolori); return 0; 17/例11-5 字符串排序void fsort(int a , int n) int k, j; int temp; for(k = 1; k n; k+) for(j = 0; j aj+1) temp = aj; aj = aj+1; aj+1 = temp; v

11、oid fsort(char *color , int n) int k, j; char *temp; for(k = 1; k n; k+) for(j = 0; j 0) temp = colorj; colorj = colorj+1; colorj+1 = temp; 18/pcolor0pcolor1pcolor2pcolor3pcolorred0blue0yellow0green0purple0pcolor4排序前pcolor0pcolor1pcolor2pcolor3pcolorpcolor4排序后red0blue0yellow0green0purple019/2. 动态输入多

12、个字符串示例用动态分配内存的方法处理多个字符串的输入示例例11-6 输入一些球的颜色,以#作为输入结束标志,再输出这些颜色。其中颜色数小于20,颜色的英文名称不超过10个字符。#include #include#includeint main(void) int i, n = 0; char *color20, str10; printf(请输入颜色名称,每行一个,#结束输入:n); scanf(%s, str); while(str0 != #) colorn = (char *) malloc ( sizeof (char) * ( strlen(str) + 1 ) ); strcpy(

13、colorn, str); n+; scanf(%s, str); printf(你输入的颜色是:); for(i = 0; i n; i+) printf(%s , colori); return 0;请输入颜色名称,每行一个,#结束输入:redblue yellow#你输入的颜色是:red blue yellow21/3. 对指针数组的进一步讨论char *color = red, blue, yellow, green, purple;color:二级指针(char *),&color0 color+2:指向color2 *(color+2)和color2等价 color0:指向字符串r

14、ed的首字符rcolor0+2:指向首字符r后的第2个字符d22/对指针数组的进一步讨论(1) colork*(color+k) printf(%s, color2); printf(%s, *(color+2); (2) *(colork+j) *(*(color+k)+j) colorkj printf(%c %c, *(color2), *(color2+2); printf(%c %c, color20, color22); 23/11.1.5 命令行参数C语言源程序经编译和连接处理,生成可执行程序后,才能运行。在DOS环境的命令窗口中,输入可执行文件名,就以命令方式运行该程序。 输入

15、命令时,在可执行文件(命令)名的后面可以跟一些参数,这些参数被称为命令行参数。 test world 命令名命令行参数#include /* test.c */int main( ) printf(Hello World!); return 0;24/命令行参数命令名 参数1 参数2参数n命令名和各个参数之间用空格分隔,也可以没有参数使用命令行的程序不能在编译器中执行,需要将源程序经编译、链接为相应的命令文件(一般以.exe为后缀),然后回到命令行状态,再在该状态下直接输入命令文件名。 带参数的main()函数int main( int argc, char *argv ) .第1个参数 argc 接收命令行参数(包括命令名)的个数第2个参数 argv 接收以字符串常量形式存放的命令行参数(命令名本身也作为一个参数) #include /* test.c */int main(int argc, char *argv ) printf(Hello ); printf(%s, argv1); return 0;test world!Hello world!argc: 2*argv : test, world!例11-7 输出命令行参数

温馨提示

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

评论

0/150

提交评论