C语言教案-第十五周
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第8章指针
本节题目指针与字符串
1:本节主要目的
1.1教学目的:1、了解字符串的表示形式
2、了解字符串指针作函数参数
1.2教学内容:1、字符串的表示形式
2、字符串指针作函数参数
1.3教学重点:1、了解字符串指针作函数参数
1.4教学方法:讲授+演示
1.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 字符串
从以上两个例子中,可以看到:
1、字符数组和字符指针的概念不同。
2、字符指针指向字符串,而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.";