《第9章指针.ppt》由会员分享,可在线阅读,更多相关《第9章指针.ppt(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第9章 指针杨章伟杨章伟e-mail:1-2课程内容安排课程内容安排指针的基本概念指针的基本概念 变量与指针变量与指针 指针的运算指针的运算 数组与指针数组与指针字符串与指针字符串与指针指针的综合应用指针的综合应用小结小结 1-3指针的基本概念指针的基本概念 简简单单来来说说,指指针针是是一一个个地地址址,其其指指向向存存储储某某一一个个数数据据的的存存储储地地址址。此此外外,还还有有一一个个指指针针变变量量的的概概念念,指指针针变变量量是是一一种种特特殊殊性性质质的的变变量量。指指针针变变量量是是把把地地址址存存放放在在一一个个变变量量中中,然然后后通通过过先先找找出出地地址址变变量量中中的
2、的值值(一一个个地地址址),再再由由此此地地址址找找到到最最终终要要访访问问的的变变量量的的方方法法,这这就就是是指指针针变变量量及及其其访访问问方方法法,而地址变量就是指针。而地址变量就是指针。1-4既然指针是变量,那么在程序中使用时,就必须和变量一样既然指针是变量,那么在程序中使用时,就必须和变量一样先声明,后使用。在指针声明的同时也可以进行初始化。先声明,后使用。在指针声明的同时也可以进行初始化。指针的定义指出了指针的存储类型和数据类型,指针的定义指出了指针的存储类型和数据类型,C语言中语言中指针的一般定义语法形式如下:指针的一般定义语法形式如下:存储类型名存储类型名 数据类型数据类型
3、*指针变量名指针变量名存储类型名:存储类型名:C语言中的存储类型一般有静态存储、自动类语言中的存储类型一般有静态存储、自动类型、寄存器类型、全局变量等四种,一般的默认值为自动型、寄存器类型、全局变量等四种,一般的默认值为自动类型类型atuo。数据类型:可以是任一基本类型名及自定义类型名;也可以数据类型:可以是任一基本类型名及自定义类型名;也可以是由是由*表示的指针类型名,该类型称它为多级指表示的指针类型名,该类型称它为多级指针。针。定义指针变量定义指针变量 1-5指针变量的初始化指针变量的初始化 与一般变量不同的是,定义了一个指针后,在使用此指与一般变量不同的是,定义了一个指针后,在使用此指针
4、前,必须首先给它赋一个合法的值。否则,程序中对针前,必须首先给它赋一个合法的值。否则,程序中对指针的使用就有可能导致系统崩溃。一般来说,指针的使用就有可能导致系统崩溃。一般来说,C语言语言中可以在定义指针的同时通过初始化来给指针赋值,也中可以在定义指针的同时通过初始化来给指针赋值,也可以在使用之前给指针赋值。可以在使用之前给指针赋值。下面首先来了解指针的初始化,由于指针是保持地址的下面首先来了解指针的初始化,由于指针是保持地址的变量,所以初始化时赋予它的初值必须是地址量。指针变量,所以初始化时赋予它的初值必须是地址量。指针初始化的一般形式如下:初始化的一般形式如下:存储类型存储类型 数据类型数
5、据类型*指针名指针名=初始地址值初始地址值;1-6指针的运算指针的运算 与与变变量量类类似似的的,指指针针也也可可以以进进行行运运算算,称称为为指指针针运运算算。指指针针运运算算是是以以指指针针变变量量所所持持有有的的地地址址值值为为运运算算量量进进行行的的运运算算。因因此此,指指针针运运算算的的实实质质是是地地址址的的计计算算。由由于于指指针针是是持持有有地地址址量量的的变变量量这这一一特特性性,指指针针的的运运算算与与普普通通变变量量的的运运算算在在种种类类上上和和意意义义上上都都是是不不同同的的。指指针针运运算算的的种种类类是是有有限限的的,它它只只能能进进行行算术运算、关系运算和赋值运
6、算。算术运算、关系运算和赋值运算。1-7取地址和取值运算取地址和取值运算 如果定义了一个指针,并使其值为某个变量的地址,则如果定义了一个指针,并使其值为某个变量的地址,则可以通过这个指针间接地访问在这个地址中存储的值。可以通过这个指针间接地访问在这个地址中存储的值。经过上面部分的学习我们知道,在经过上面部分的学习我们知道,在C语言中有两个有关语言中有两个有关指针的特别运算符。指针的特别运算符。&运算符:为取地址运算符,运算符:为取地址运算符,&x的值为的值为x的地址。的地址。*运算符:为取值运算符,也称为指针运算符,或指向运算符:为取值运算符,也称为指针运算符,或指向运算符,也称间接运算符,运
7、算符,也称间接运算符,*p代表代表p所指向的变量。所指向的变量。由此可看出,利用指针来访问变量值需要使用间接访问由此可看出,利用指针来访问变量值需要使用间接访问运算符运算符“*”。1-8数组与指针数组与指针 指针在数组中的使用非常方便,其可以通过算术运算指指针在数组中的使用非常方便,其可以通过算术运算指向数组中的不同元素向数组中的不同元素 事实上,由于数组名表示的是该数组的首地址,所以如事实上,由于数组名表示的是该数组的首地址,所以如果定义一个指针指向数组,则可如下声明:果定义一个指针指向数组,则可如下声明:int a10;int*pa=a;这个语句定义了一个指针这个语句定义了一个指针pa,并
8、把,并把pa初始化为指向数初始化为指向数组组int a10的指针,即指针的指针,即指针pa指向数组的第一个元素。指向数组的第一个元素。这时,不需要使用取地址运算符这时,不需要使用取地址运算符“&”。上述声明方式。上述声明方式与下面的语句等价:与下面的语句等价:int a10;int*pa=&a0;1-9在在C语言中,数组指针就是一个指向数组的指针,上述代码语言中,数组指针就是一个指向数组的指针,上述代码中就使用到了数组指针中就使用到了数组指针p。数组指针是一个指向一维数组。数组指针是一个指向一维数组的指针变量,语言中,定义数组指针的一般格式为:的指针变量,语言中,定义数组指针的一般格式为:数据
9、类型(数据类型(*指针名)指针名)常量表达式常量表达式;例如,下面定义了一个指向包含例如,下面定义了一个指向包含5个整型元素的一维数组的个整型元素的一维数组的指针。指针。int(*p)5;这个语句定义了一个数组指针这个语句定义了一个数组指针p,指向一个包含,指向一个包含5个元素的一个元素的一维数组,数组元素为整型。维数组,数组元素为整型。数组指针数组指针 1-10C语言中可以定义一个字符数组,实现字符串的存储,语言中可以定义一个字符数组,实现字符串的存储,并通过数组下标来访问指定字符。事实上,并通过数组下标来访问指定字符。事实上,C语言还提语言还提供了另外一种存储访问字符串的方法,即字符指针,
10、定供了另外一种存储访问字符串的方法,即字符指针,定义一个字符指针,就可以通过该指针的指向来访问指定义一个字符指针,就可以通过该指针的指向来访问指定字符。字符。与普通指针一样,字符指针在使用前必须先定义。与普通指针一样,字符指针在使用前必须先定义。C语语言中定义字符指针与其他指针的定义方式相同,只需将言中定义字符指针与其他指针的定义方式相同,只需将其数据类型改为其数据类型改为char即可。例如,下面语句定义了两个即可。例如,下面语句定义了两个字符指针。字符指针。char*str;char*str1=”Welcome”;字符串与指针字符串与指针 1-11应用示例应用示例 下面示例从用户接收一个字符
11、串输入,将其中的小写字下面示例从用户接收一个字符串输入,将其中的小写字母全部转换为大写字母输出,如输入为大写字母的则不母全部转换为大写字母输出,如输入为大写字母的则不变,该字符串允许包含空格和其他字符,这些字符不进变,该字符串允许包含空格和其他字符,这些字符不进行转换即输出。行转换即输出。分析:该示例首先根据用户输入的字符串逐个字符进行分析:该示例首先根据用户输入的字符串逐个字符进行辨识,发现为小写字母的及进行转换,转换操作即将小辨识,发现为小写字母的及进行转换,转换操作即将小写字母减去写字母减去32即可,如是其他大写字母或字符则不进行即可,如是其他大写字母或字符则不进行转换,直到整个字符串转
12、换完毕。因此,需要使用到循转换,直到整个字符串转换完毕。因此,需要使用到循环语句。环语句。1-12注注意意:要要通通过过指指针针访访问问一一个个字字符符串串,可可以以将将这这个个指指针针指指向向此此字字符符串串,并并利利用用指指针针的的加加1、减减1操操作作实实现现对对各各个个字字符的访问。符的访问。1-13指针的综合应用指针的综合应用 指针在具体程序中的应用非常频繁,鉴于其在指针在具体程序中的应用非常频繁,鉴于其在C语言中的作用,许语言中的作用,许多教材都将指针称为多教材都将指针称为C语言的灵魂。可以说,学好了指针是学好了语言的灵魂。可以说,学好了指针是学好了C语言的标志之一。在后续章节的许
13、多示例中,都将用到指针的概语言的标志之一。在后续章节的许多示例中,都将用到指针的概念。念。下面示例在用户输入的一个字符串中寻找字符下面示例在用户输入的一个字符串中寻找字符z的个数,如果的个数,如果没有则输出提示信息。这在许多领域是比较常用的一个功能没有则输出提示信息。这在许多领域是比较常用的一个功能 1-14程序实现通过程序实现通过for循环逐个字符进行查找,一直到字符串结循环逐个字符进行查找,一直到字符串结束,其结束标志位字符串结束符束,其结束标志位字符串结束符0。此处用字符指针。此处用字符指针指向字符串。事实上,在一个输入字符串中统计某一个字指向字符串。事实上,在一个输入字符串中统计某一个
14、字符的个数,这在许多应用程序中都是常用的。在后续章节符的个数,这在许多应用程序中都是常用的。在后续章节中介绍文件后,将可以结合文件的概念通过指针在某一文中介绍文件后,将可以结合文件的概念通过指针在某一文件中寻找某个字符出现的频度。件中寻找某个字符出现的频度。1-15小结小结 本章主要讲解了本章主要讲解了C语言中较为复杂的一个部分语言中较为复杂的一个部分指针,指指针,指针是针是C语言的灵魂,读者应仔细掌握。本章一开始就通过语言的灵魂,读者应仔细掌握。本章一开始就通过一个示例介绍了指针的概念和作用,接下来主要介绍了指一个示例介绍了指针的概念和作用,接下来主要介绍了指针的运算,包括通过指针取值(针的运算,包括通过指针取值(*)、取地址()、取地址(&)、指)、指针的算术运算和关系运算等。此外,本章重点介绍了指针针的算术运算和关系运算等。此外,本章重点介绍了指针的应用,主要包括指针在数组中的应用和在字符串中的应的应用,主要包括指针在数组中的应用和在字符串中的应用。有关指针和函数的应用及二级指针的定义,将在下一用。有关指针和函数的应用及二级指针的定义,将在下一章节具体介绍。章节具体介绍。