C程序设计讲义
指针(理论三)
教学目的:
字符串指针和指向字符串指针
教学重(难)点: 授课形式:
理论 多媒体
教学条件:
教学内容: 复习: 提问: 新课:
字符串的指针和指向字符串的指针变量
1.字符串的表示形式。
C语言允许使用两种方法实现一个字符串的引用。(字符数组、字符指针)。 (1).字符数组
将字符串的各个字符(包括结尾标志‘\\0’)依次存放到字符数组中,利用数组名或下标变量对数组进行操作。 例:字符数组应用 main() {
char string[]=”I am a student.”; printf(“%s\\n”,string); /* 整体输出 */ }
(2)字符指针
可以不定义字符数组,直接定义指向字符串的指针变量,利用指针变量对字符串进行操作。
例字符指针的应用(略)
main() { char *string=”I am a student.”; printf(“%s\\n”,string); /* 整体输出 */ printf(“%c,%c\\n”,string[3],*(string+3)); /* 输出其中一个字符 */ } 运行: I am a student. m,m
可以看出:C语言允许除了使用字符数组进行字符串的处理外,还可以使用字符指针。
例10-11:输入两个字符串,比较是否相等。相等输出yes,不等输出no.(P.152) (要求使用字符指针处理字符串)。
等价: char temp[]=”I student”,*string; am a 字符指针 #include
10、3、字符串指针作为函数参数
使用字符串(字符数组)指针变量(实际就是字符指针变量)可以作为函数形参接受来自实参字符串(字符数组)的地址。在函数中改变字符指向的字符串的内容,在主调函数中得到改变了的字符串。
例10-12:将输入字符串中的大写字母改为小写字母,然后输出字符串。(P152) #include
用指向字符串(字符数组)的字符指针对字符串进行操作,比使用字符数组进行操作更加灵活、方便。
例如:inv函数还可以改写为下面两种形式:
void inv(char *s) { while(*s!=’\\0’) { if(*s>=65&&*s<91) *s+=32; s++; } } void inv(char *s) { for(;*s!=’\\0’;s++) if(*s>=65&&*s<91)*s+=32; } 10、3、3 字符数组和字符指针的区别。(实际上就是数组与指针的区别)
字符数组和字符(串)指针都能够实现对字符串的操作,但它们是有区别的,主要区别在下面几个方面: (1) 存储方式的区别
字符数组由若干元素组成,每个元素存放一个字符。字符指针存放的是地址(字符数组的首地址),不是将整个字符串放到字符指针变量中。
(2) 赋值方式的区别
对字符数组只能对各个元素赋值,不能将一个常量字符串赋值给字符数组(字符数组定义例外)。可以将一个常量字符串赋值给字符指针,但含义仅仅是将常量串首地址赋值给字符指针。 例如:
不允许:char str[100]; str=”I am a student.”;因为:数组可以在变量定义时整体赋值,但不能在赋值语句中整体赋值。
允许:char *pstr; pstr=”I am a student.”;
(3) 定义方式的区别
定义数组后,编译系统分配具体的内存单元(一片连续内存空间),各个单元有确切的地址。定义一个指针变量,编译系统只分配一个2字节存储单元,以存放地址值。也就