资源简介 课题序号 授课班级授课课时 授课形式 理论授课章节 名称 8.4 指向字符串的指针变量 8.5 指针作为函数参数使用教具 计算机、多媒体电视、黑板教学目的 掌握字符串利用指针解决问题 掌握指针作为函数参数的解题方法教学重点 字符串指针的使用教学难点 指针作为函数参数的运用更新、补 充、删节 内容课外作业教学后记授课主要内容或板书设计8.4 指向字符串的指针变量 8.5 指针作为函数参数课 堂 教 学 安 排教学过程 主 要 教 学 内 容 及 步 骤(一)导入新课 (二)新授 (三)总结扩展: (四)作业布置: 在C语言中,字符串可以用字符数组实现。其实,字符串还可以用字符指针实现,而且字符指针更方便、简洁。 8.4 指向字符串的指针变量 字符串指针变量的说明和使用字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。 对指向字符变量的指针变量应赋予该字符变量的地址。 如: char c,*p=&c; 表示p是一个指向字符变量c的指针变量。 而: char *s="C Language"; 则表示s是一个指向字符串的指针变量。把字符串的首地址赋予s。请看下面一例。main(){char *ps;ps="C Language";printf("%s",ps);} 运行结果为: C Language又比如:输出字符串中n个字符后的所有字符。main(){char *ps="this is a book";int n=10;ps=ps+n;printf("%s\n",ps);} 运行结果为: book 在程序中对ps初始化时,即把字符串首地址赋予ps,当ps= ps+10之后,ps指向字符“b”,因此输出为"book"。下面这个例子是将指针变量指向一个格式字符串,用在printf函数中,用于输出二维数组的各种地址表示的值。但在printf语句中用指针变量PF代替了格式串。 这也是程序中常用的方法。main(){static int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};char *PF;PF="%d,%d,%d,%d,%d\n";printf(PF,a,*a,a[0],&a[0],&a[0][0]);printf(PF,a+1,*(a+1),a[1],&a[1],&a[1][0]);printf(PF,a+2,*(a+2),a[2],&a[2],&a[2][0]);printf("%d,%d\n",a[1]+1,*(a+1)+1);printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));}使用字符串指针变量与字符数组的区别 用字符数组和字符指针变量都可实现字符串的存储和运算。 但是两者是有区别的。在使用时应注意以下几个问题: 1. 字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。 2. 对字符数组作初始化赋值,必须采用外部类型或静态类型,如: static char st[]={“C Language”};而对字符串指针变量则无此限制,如: char *ps="C Language"; 3. 对字符串指针方式 char *ps="C Language";可以写为: char *ps; ps="C Language";而对数组方式:static char st[]={"C Language"}; 不能写为:char st[20];st={"C Language"}; 而只能对字符数组的各元素逐个赋值。 从以上几点可以看出字符串指针变量与字符数组在使用时的区别,同时也可看出使用指针变量更加方便。前面说过,当一个指针变量在未取得确定地址前使用是危险的,容易引起错误。但是对指针变量直接赋值是可以的。因为C系统对指针变量赋值时要给以确定的地址。因此,char *ps="C Langage"; 或者char *ps;ps="C Language"; 都是合法的。 8.5 指针作为函数参数 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将指针变量的值(该指针变量所指变量的地址)传送到另一个函数中。 例 用函数来实现两个变量值的交换。 void swap(int *q1, int *q2) { int t; t=*q1; *q1=*q2; *q2=t; } main( ) { int a, b, *p1, *p2; scanf(″%d,%d″, &a, &b); p1=&a; p2=&b; if (a 展开更多...... 收起↑ 资源预览