7.4字符型指针引用字符串(课件)-《 C语言程序设计》同步教学(电子工业出版社)

2024-08-11
| 19页
| 76人阅读
| 10人下载
普通

内容正文:

第七章 程序的性能优化--指针 1 CONTENTS 目录 01 02 为什么使用指针 什么是指针 03 指针变量的应用 04 指针变量的运算 05 使用指针访问一维数组中的元素 CONTENTS 目录 06 07 字符型指针引用字符串 使用指针访问二维数组中的元素 08 指针数组与指针的指针 09 使用指针作为函数的参数 10 使用指针作为函数的返回值 11 使用指针调用函数 C语言 知识树 My First Template 字符型指针引用字符串 C语言程序设计 5 C语言 字符型指针引用字符串 字符型指针引用字符串 访问一个字符串,可以通过两种方式: 一种是在数组章节中所学的使用字符数组来存放和操作一个字符串,通过数组名和下标引用一个字符,或者通过数组名和格式声明“%s”输入或输出该字符串; 另一种方式就是即将要学习的利用字符指针引用一个字符串,在这种方式下,不需要定义字符数组,也就不需要提前划定一片连续的存储空间,而是用多少占多少。 My First Template C语言 本次任务 使用字符型指针保存一个字符串的首地址,并输出该字符串 字符型指针引用字符串 My First Template C语言 任务实现 #include "stdio.h"//预处理 void main() //主函数 { char *string=" 纸上得来终觉浅,绝知此事要躬行。 "; printf("%s",string); } 程序中没有定义字符数组,只定义了一个字符指针变量,并使用字符串常量对它进行了初始化。但事实上C语言程序仍然会在内存的常量区中开辟一个字符数组的空间来存放这个字符串常量,只不过该字符数组没有定义名字,只能通过字符指针变量来引用,字符指针变量里存放的就是这个字符数组的首地址。字符指针变量的初始化,也可以写成两句,注意第二句string前不应该有“*”号。 char *string; string=" 纸上得来终觉浅,绝知此事要躬行。 "; 字符型指针引用字符串 My First Template C语言 本次任务 利用字符指针复制字符串 字符型指针引用字符串 My First Template C语言 任务实现 #include "stdio.h"//预处理 void main() //主函数 { char str1[]="行是知之始,知是行之成。"; char str2[50]; char *p1,*p2; for(p1=str1,p2=str2;*p1!='\0';p1++,p2++) *p2=*p1; *p2='\0'; printf("原字符串是:%s ",str1); printf("复制字符串:%s ",str2); } 说 明1:将字符指针p1和p2分别指向两个字符数组的首地址。将第一个字符数组的元素赋值给第二个字符数组的元素,之后两个字符指针分别向后跳跃一个字符元素,直到第一个字符指针指向字符串结束标志'\0'为止。 说 明2:字符数组与字符指针变量不同之处在于,指针变量的值是可以改变的,而数组名是一个常量,不可以改变。可以移动字符指针指向数组中的任何位置,却不能移动数组本身的位置。 字符型指针引用字符串 My First Template 指针数组与指针的指针 C语言程序设计 11 C语言 指针数组 指针数组与指针的指针 一个数组的元素均为指针类型的数据,就是指针数组。换句话说,指针数组中每一个元素都相当于一个同类型的指针变量,用来存放一个地址。 类型名 *数组名[数组长度]; 例 如: int *p[4]; 说 明:此句表示的是声明一个含有四个元素的数组p,每一个元素都是一个指向整型数据的指针。 我们经常使用指针数组来指向一个二维数组,即指针数组的每一个元素指向二维数组的每一行首地址,也就是指向一个一维数组。而这种应用特别适合指向若干个字符串。 My First Template C语言 本次任务 已知5本图书的名称,将他们排序后输出 指针数组与指针的指针 My First Template C语言 任务实现 #include "stdio.h"//预处理 #include "string.h" void main() { char *book[5]={"程序设计基础","计算机组成原理","汇编语言","编译原理","数据结构"}; char *temp; int i,j; for(i=0;i<4;i++) //使用选择法将指向字符串的指针进行排序 { for(j=i+1;j<5;j++) if(strcmp(book[i],book[j])>0) //字符串比较函数 { temp=book[i]; book[i]=book[j]; book[j]=temp; } } for(i=0;i<5;i++) printf("%s ",book[i]); } 指针数组与指针的指针 My First Template C语言 任务分析与总结 字符串数组初始化 字符串数组排序后 使用选择法通过strcmp函数对字符串进行了比较和排序。但是请注意在排序时,交换和移动的并不是字符串,而是指向字符串的指针。假如交换的是字符串,那么因为字符串长度各不相同,需要先定义一个足够宽度的二维字符数组来存放这几个字符串,这样无形中增加了存储空间的浪费,而且交换字符串需要进行字符串的复制,程序执行速度就会变慢。 指针数组与指针的指针 My First Template C语言 指针的指针 指针数组与指针的指针 指针数组的数组名代表了该指针数组所有元素的首地址。前面的实例中的book数组。book代表了book[0]这个字符指针的地址,book+i就代表了book[i]的地址,*(book+i)则代表book[i]的值。假如设一个指针变量p,用它指向book数组中的元素,那么p就是一个指向指针的指针 指针变量可以指向整型变量、实型变量、字符型变量,当然也可以指向指针变量。我们定义一个指针的指针,语法是: 类型名 **指针变量名; My First Template C语言 指针的指针 指针数组与指针的指针 例如1: char **p; 说 明:p代表一个指向“指向字符型数据指针”的指针。这个写法相当于“char *(*p);”。 如果我们要初始化p,以指针数组实例中的字符数组为例,我们可以为p进行如下赋值: p=book; //p指向book[0] p=&book[1]; //p指向book[1] p=book+3; //p指向book[3] 例如2: int i=15; int *p1=&i; int **p2=&p1; 说 明:这几句含义是,声明了一个整型变量i并初始化赋值15;接下来声明了一个指向整型变量的指针p1,并将它指向变量i;再声明了一个指向“指向整型变量的指针”的指针p2,并将它指向p1。如图7. 17所示。引用变量i,可以是*p1,也可以是**p2。 My First Template C语言 任务实现 #include "stdio.h" //预处理 void main() { char *book[5]={"程序设计基础","计算机组成原理","汇编语言","编译原理","数据结构"}; char **p; //定义指向字符型指针的指针 for(p=book;p<book+5;p++) { printf("%s ",*p); } } 指针数组与指针的指针 My First Template C语言 任务实现 #include "stdio.h" //预处理 void main() { char *book[5]={"程序设计基础","计算机组成原理","汇编语言","编译原理","数据结构"}; char **p; //定义指向字符型指针的指针 for(p=book;p<book+5;p++) { printf("%s ",*p); } } 指针数组与指针的指针 指针p指向字符指针数组的第一个元素book[0],而book[0]也就是*p是第一个字符串“程序设计基础”的首地址。我们用格式字符“%s”输出*p即可 My First Template $$

资源预览图

7.4字符型指针引用字符串(课件)-《 C语言程序设计》同步教学(电子工业出版社)
1
7.4字符型指针引用字符串(课件)-《 C语言程序设计》同步教学(电子工业出版社)
2
7.4字符型指针引用字符串(课件)-《 C语言程序设计》同步教学(电子工业出版社)
3
7.4字符型指针引用字符串(课件)-《 C语言程序设计》同步教学(电子工业出版社)
4
7.4字符型指针引用字符串(课件)-《 C语言程序设计》同步教学(电子工业出版社)
5
7.4字符型指针引用字符串(课件)-《 C语言程序设计》同步教学(电子工业出版社)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。