第8章指针
本节题目指针与字符串 1:本节主要目的
1.1教学目的:
1、了解字符串的表示形式
2、了解字符串指针作函数参数
1.2教学内容:
1、字符串的表示形式
2、字符串指针作函数参数
1.3教学重点:
1、了解字符串指针作函数参数 1.4教学方法:讲授+演示 5学习方法:听课+笔记+练习2:引入本课内容: [5分钟] 在上一节课,学习了指针与一维数组的各种情况,那么,指针能否指向一个字符串呢?如果可以,是一种什么样的情况呢?今天这节课来学习指针与字符串。 3:课程知识点讲解:
具体知识点1:字符串的表现形式[15分钟] C语言中,有两种方式可以实现字符串:字符数组、字符指针 案例讲解1:用字符数组存放一个字符串,然后输出该字符串。
main()
, static char string*+=“I love China!”;
printf(“%s\n”,string); } 程序说明:string是数组名,代表字符数组的首地址。数组可以用下标访问,也可以用指针访问。如string[4]表示一个元素值是字符v,也可以用*(string+4)来访问,string+4是指向字符v的指针。
案例讲解2:用字符串指针指向一个字符串,然后输出该字符串。
main()
, char *string=“I love China!”;
printf(“%s\n”,string); } 程序说明:string是一个指针变量,“I love China!”是一个字符串常量。语句char *string=“I love China!”;等价于char *string;string=“I love China!”
它把字符串常量的首地址赋给指针string。不能理解为把字符串常量赋给指针变量。 char *string=“I love China!”;
string
字符串 从以上两个例子中,可以看到: 字符数组和字符指针的概念不同。
字符指针指向字符串,而C语言中,字符串按数组方式处理,因此,字符数组和字符指针的访问方式相同。例如,均可以使用%s格式控制符进行整体输入输出。但应注意,如果不是字符数组,而是整型、实型等数字型数组,不能用%s,只能逐个元素处理。 案例讲解3:将字符串a复制到字符串b。(以下用两种方法实现) 方法一:
main()
, char a*+=“I am a boy.”;
char b[20];
int i;
for(i=0;*(a+i)!=’\0’);i++)
*(b+i)=*(a+i);
*(b+i)=’\0’;
printf(“string a is:%s\n”,a);
printf(“string b is:”);
for(i=0;b*i+!=’\0’;i++)
printf(“%c”,b*i+);
printf(“\n”); } 方法二:
main() , char a*+=“I am a boy.”,b*20+,*p1,*p2;
int i;
p1=a;p2=b;
for(;*p1!=’\0’;p1++,p2++)
*p2=*p1;
*p2=’\0’;
printf(“string a is:%s\n”,a);
printf(“string b is:”);
for(i=0;b*i+!=’\0’;i++)
printf(“%c”,b*i+);
printf(“\n”); } 在此案例中,程序完成了两项工作:一是把p1指向的源字符串复制到p2所指向的目标字符串中,二是判断所复制的字符是否为’\0’,若是则表明源字符串结束,不再循环。否则,p2和p1都加1,指向下一字符。
具体知识点2:字符串指针作函数参数[30分钟] 将一个字符串从一个函数传递到另一个函数,可以使用传地址的方式,即用字符数组名或字符指针变量作参数。有以下四种情况:
实参
形参
1
数组名
数组名
2
数组名
字符指针变量
3
字符指针变量
字符指针变量
4
字符指针变量
数组名
案例讲解:用函数调用实现字符串的复制。 (1)用字符数组作参数
void copy_string(char from[], char to[]) { int i=0;
while(from[i] != '\0')
{ to[i] = from[i]; i++; }
to[i] = '\0'; } main ()
{ char a[] = "I am a teacher.";
char b[] = "you are a student.";
printf("string_a =%s\n string_b =%s\n", a,b);
copy_string(a,b);
printf("string_a =%s\n string_b =%s\n", a,b); }
使用字符指针可以将main()函数改写为: main ()
{ char *a = "I am a teacher.";
char *b = "you are a student.";
printf("string_a =%s\n string_b =%s\n", a,b);
copy_string(a,b);
printf("string_a =%s\n string_b =%s\n", a,b); }
(2)形参用字符指针。
void copy_string (char *from, char *to) { for(; *form != '\0'; from++, to++)
*to = *from;
*to = '\0'; }
main ()
{ char *a = "I am a teacher.";
char *b = "you are a student.";
printf("string_a =%s\n string_b =%s\n", a,b);
copy_string(a,b);
printf("string_a =%s\n string_b =%s\n", a,b); }
老师提问:
问题1:分别观察两个案例的实参和形参,能总结出什么? 4 本节总结 [10分钟] 将一个字符串从一个函数传递到另一个函数,可以使用传地址的方式,即用字符数组名或字符指针变量作参数,有以下四种情况:
组合情况
实参
形参
1
数组名
数组名
2
数组名
字符指针变量
3
字符指针变量
字符指针变量 4
字符指针变量
数组名
学生问题汇总:
问题1:部分学生字符串章节没有学好,在本节学习较吃力。
问题2:字符串从一个函数传递到另一个函数的四种方式在实际变成应用中不够熟练。 作业:输人三行字符,每行60个字符,要求统计出其中共有多个大写字母、小写字母、空格、标点符号。