补充内容:C语言指针详解-精品文档资料整理.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《补充内容:C语言指针详解-精品文档资料整理.ppt》由会员分享,可在线阅读,更多相关《补充内容:C语言指针详解-精品文档资料整理.ppt(50页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、 指针指针本章主要内容:本章主要内容:1.指针的基本概念指针的基本概念2.各种类型的指针:各种类型的指针:数组的指针、字符串的指针、数组的指针、字符串的指针、函数的指针、指针的指针等函数的指针、指针的指针等指针的优点:指针的优点:(1)可有效地表示复杂的数据结构;)可有效地表示复杂的数据结构;(2)动态分配内存;)动态分配内存;(3)方便地使用字符串,数组;)方便地使用字符串,数组;(4)直接处理内存地址等。)直接处理内存地址等。指针的缺点:指针的缺点:概念繁杂,使用时较灵活,不易掌握。概念繁杂,使用时较灵活,不易掌握。7.1 地址和指针的概念地址和指针的概念 在计算机中,在计算机中,所有的数
2、据都是存放在存储器中的所有的数据都是存放在存储器中的。一般把一般把存储器中的一个字节存储器中的一个字节称为称为一个内存单元一个内存单元,不不同的数据类型所占用的内存单元数不等同的数据类型所占用的内存单元数不等,如整型量,如整型量占占2个单元,字符量占个单元,字符量占1个单元等。个单元等。为了正确地访问这些内存单元,为了正确地访问这些内存单元,必须为每个内存单必须为每个内存单元编上号。元编上号。根据一个内存单元的编号即可准确地找根据一个内存单元的编号即可准确地找到该内存单元。到该内存单元。内存单元的编号也叫做地址内存单元的编号也叫做地址。既然既然根据内存单元的编号或地址就可以找到所需的内存根据内
3、存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个单元,所以通常也把这个地址称为指针地址称为指针。变量与地址变量与地址程序中程序中:short i;float k;内存中每个字节有一个编号内存中每个字节有一个编号-地址地址.2000200120022005内存内存02003ik变量是一块存储空间变量的地址就是指针7.1 地址和指针的概念地址和指针的概念 一、关于内存一、关于内存内存单元的内存单元的指针指针和内存单元的和内存单元的内容内容是是两个不同的两个不同的概念概念。对于一个内存单元来说,单元的地址即为指针,对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。
4、其中存放的数据才是该单元的内容。在语言中,在语言中,允许用一个变量来存放指针,这种允许用一个变量来存放指针,这种变量称为指针变量。因此,变量称为指针变量。因此,一个一个指针变量指针变量的值就的值就是某个内存单元的是某个内存单元的地址地址或称为某内存单元的或称为某内存单元的指针指针。二、关于变量的访问二、关于变量的访问 1.直接访问:根据变量名直接访问变量。直接访问:根据变量名直接访问变量。int i;i=3;printf(%d,i);2.间接访问:将变量的地址存放于另一变量间接访问:将变量的地址存放于另一变量问题问题:如何获得一个变量的地址如何获得一个变量的地址?如何保存一个变量的地址如何保存
5、一个变量的地址?如何获得一个变量的地址如何获得一个变量的地址?&取地址运算符。取地址运算符。int a;则则&a获得获得变量的地址变量的地址如何保存一个变量的地址如何保存一个变量的地址?将变量的地址放在另一个将变量的地址放在另一个(变量)(变量)中中三、若干术语三、若干术语 1.指针指针:一个变量的地址,称为该变量的指针。:一个变量的地址,称为该变量的指针。2.指针变量指针变量:专门用来存放另一变量的地址(指:专门用来存放另一变量的地址(指 针)的变量,称为指针变量。针)的变量,称为指针变量。3.指向指向:指针变量:指针变量指向指向变量。变量。a&aptpt指向指向a7.2 变量的指针和指向变
6、量的指针变量变量的指针和指向变量的指针变量一、指针变量的定义一、指针变量的定义一般形式:一般形式:类型标识符类型标识符 *标识符;标识符;例如:例如:float*pf;int*p1,*p2;说明:说明:(1)定义时,标识符前面的定义时,标识符前面的*表示该变量为指针变量,上例中表示该变量为指针变量,上例中 变量名为变量名为p1,p2。(2)类型标识符指出类型标识符指出p1、p2所指向的变量的类型。所指向的变量的类型。二、指针变量的引用二、指针变量的引用两个相关运算符:两个相关运算符:1&取地址运算符。取地址运算符。例例:int a,*pt;若若:pt=&a apt2*指针运算符指针运算符(间接
7、访问运算符间接访问运算符)*pt为指针变量为指针变量pt所指向的变量所指向的变量.*pt等价于等价于a *pt=10;相当于相当于a=10 pt指向指向a例:例:main()int a,b;int*pointer_1,*pointer_2;a=100;b=10;pointer_1=&a;pointer_2=&b;printf(%d,%dn,a,b);printf(%d,%dn,*pointer_1,*pointer_2);abpointer_1pointer_210010&a&b例:输入两个整数例:输入两个整数a,b,按大小顺序输出。,按大小顺序输出。main()int a,b,*p1,*p2
8、,*p;scanf(%d%d,&a,&b);p1=&a;p2=&b;if(ab)p=p1;p1=p2;p2=p;printf(a=%d,b=%d,a,b);printf(max=%d,min=%d,*p1,*p2);abp1p234&bp&a&a&b&a注意:注意:1、指针变量必须先赋值,再使用、指针变量必须先赋值,再使用,只能保存地址只能保存地址例如:例如:int*p,*p1,a=10;*p=20;printf(%d,*p1);3、&和和*运算符互为逆运算运算符互为逆运算若:若:int a=10,*pt=&a;则则:&a、pt、&*pt是等价的是等价的 则则:*&a、*pt、a 是等价的是等
9、价的2、一个指针变量只能指向同一类型的变量。、一个指针变量只能指向同一类型的变量。int a,*p;float f;p=&f;三、指针变量作为函数参数三、指针变量作为函数参数 实参实参形参:传去的是地址值,分占不同空间。形参:传去的是地址值,分占不同空间。1、指针变量作形参,在函数内部可以改变函数外部、指针变量作形参,在函数内部可以改变函数外部变量的值变量的值例:输入两个整数,从大到小输出。例:输入两个整数,从大到小输出。void swap(int*,int*);main()int a,b;int*p1,*p2;scanf(%d,%d,&a,&b);p1=&a;p2=&b;if(ab)swap
10、(p1,p2);printf(%d,%d,a,b);void swap(int*q1,int*q2)int q;q=*q1;*q1=*q2;*q2=q;abp1p2q1q2&a&b34&a&bq343 2、指针变量作形参,可以用来保存函数的返回值、指针变量作形参,可以用来保存函数的返回值 (输出型形参)(输出型形参)例:写一个函数,功能是求出一维整型数组中的最例:写一个函数,功能是求出一维整型数组中的最大值和最小值。大值和最小值。void maxmin(int a,int n,int*pmax,int*pmin)int i;*pmax=*pmin=a0;for(i=1;i*pmax)*pmax
11、=ai;if(ai*pmin)*pmin=ai;void main()int a10=0,9,-5,4,23,87,34,2,65,-45;int max,min;maxmin(a,10,&max,&min);printf(max=%d,min=%dn,max,min);课上练习课上练习看程序写结果:看程序写结果:void ast(int x,int y,int*cp,int*dp)*cp=x+y;*dp=x-y;void main()int a,b,c,d;a=4;b=3;ast(a,b,&c,&d);printf(%d,%dn,c,d);答案:答案:7,17.3 数组的指针和指向数组的指针
12、变量数组的指针和指向数组的指针变量一个变量有地址,一个数组包含若干元素,一个变量有地址,一个数组包含若干元素,每个每个数组元素数组元素都在内存中占用存储单元,都在内存中占用存储单元,它们都有它们都有相应的地址相应的地址。指针变量既然可以。指针变量既然可以指向变量,当然也可以指向数组元素(把指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。某一元素的地址放到一个指针变量中)。所谓所谓数组元素的指针数组元素的指针就是就是数组元素的地址数组元素的地址。一、指向数组元素的指针一、指向数组元素的指针1.定义:定义:int a10,*p;注意注意:如果数组为如果数组为int型,则指针
13、变量的基类型型,则指针变量的基类型 亦应为亦应为int型型。2.赋值:赋值:p=&a0;把把0元素的地址元素的地址赋给指针变量。赋给指针变量。也就是使指向也就是使指向数组的第号元素,数组的第号元素,如图如图:说明:说明:c语言规定数组名(语言规定数组名(不包括形参数组名不包括形参数组名),代表数),代表数组中首元素(下标为组中首元素(下标为0的元素)的地址。的元素)的地址。p=&a0;则:等价于则:等价于p=a;注意:注意:数组名数组名a不代表整个数组,上述不代表整个数组,上述p=a;的作用的作用是把是把a数组数组的首元素的地址赋给指针变量的首元素的地址赋给指针变量p,而,而不是把数组不是把数
14、组a各元素各元素的值赋给的值赋给p;在定义指针变量时可以对它赋予初值:在定义指针变量时可以对它赋予初值:int*p=&a0;或或int*p=a;等效于下面两行:等效于下面两行:int*p;p=&a0;或或 p=a;/*不是不是*p=&a0;*/习题集第七单元习题集第七单元 一、一、8,9,10,36二、通过指针引用数组元素二、通过指针引用数组元素 int a10,*p;若若p=a;则则*p=1 等价于等价于 a0=1 p+1含义是什么含义是什么?C中规定:若中规定:若p=&a0,则则p+1指向下一个元素,不是简单的指向下一个元素,不是简单的 加加1。a 0a 1a 2a 3a 9.pp+1p+
15、9 因此,如果因此,如果int a10,*p;p=a;则有以下关系:则有以下关系:(1)p+i a+i&ai。(2)*(p+i)*(a+i)ai。(3)指向数组元素的指针变量也可带下标:指向数组元素的指针变量也可带下标:pi *(p+i)。即有即有*(p+i)*(a+i)ai pi 例:输出数组中全部元素。例:输出数组中全部元素。(设设a数组,整型,数组,整型,10个元素个元素)(1)下标法下标法void main()int a10;int i;for(i=0;i10;i+)scanf(%d,&ai);printf(n);for(i=0;i10;i+)printf(%3d,ai);(2)用数组
16、名计算数组元素地址用数组名计算数组元素地址法法void main()int a10;int i;for(i=0;i10;i+)scanf(%d,a+i);printf(n);for(i=0;i10;i+)printf(%3d,*(a+i);(3)用指针变量法)用指针变量法1:main()int *p,i,a10;p=&a0;for(i=0;i10;i+)scanf(%d,p+i);printf(n);p=&a0;for(i=0;i10;i+)printf(%3d,*(p+i);/p=a;/p=a;用指针变量法用指针变量法2main()int *p,i,a10;p=a;for(i=0;i10;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 补充 内容 语言 指针 详解 精品 文档 资料 整理
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内