C程序指针(理论讲义三)

2020-05-01 10:27

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 main() { int t=0;/* t-标志变量,t=0两串相等,t=1两串不等 */ char *s1,*s2; s1=(char *)malloc(80); s2=(char *)malloc(80);/*malloc为申请空间函数,即申请80个字节的连续空间*/ gets(s1); gets(s2); while(*s1!='\\0'&&*s2!='\\0')/* s1,s2只要有一个到达串尾,结束比较 */ { if(*s1!=*s2){t=1;break;} s1++;s2++; } if(t==0&&*s1==*s2)printf(\考虑为什么要*s1==*s2 */ else printf(\ free(s1); free(s2);/*释放两个字符指针变量存储空间*/ } 运行: this these NO

10、3、字符串指针作为函数参数

使用字符串(字符数组)指针变量(实际就是字符指针变量)可以作为函数形参接受来自实参字符串(字符数组)的地址。在函数中改变字符指向的字符串的内容,在主调函数中得到改变了的字符串。

例10-12:将输入字符串中的大写字母改为小写字母,然后输出字符串。(P152) #include #include void inv(char *s) /* 或char s[] */ { int i; for(i=0; i=65&&*(s+i)<91) *(s+i)+=32; /* 或if(s[i]>=65&&s[i]<91)s[i]+=32; */ } main() { char *string; string=(char *)malloc(80); gets(string); inv(string); puts(string); free(string); } 运行结果: ACeBd acebd

用指向字符串(字符数组)的字符指针对字符串进行操作,比使用字符数组进行操作更加灵活、方便。

例如: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字节存储单元,以存放地址值。也就


C程序指针(理论讲义三).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:健康知识题库--初中组

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: