lesson17数据的组织结构二指针概念

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2019/9/9电气与信息工程学院计算机系制作Lesson17数据的组织结构2019/9/9电气与信息工程学院计算机系制作学习目标:31掌握指针概念2019/9/9电气与信息工程学院计算机系制作引例#includestdio.hvoidswap(int*a,int*b){intt;t=*a;*a=*b;*b=t;return;}intmain(){intx,y;scanf(%d%d,&x,&y);printf(交换前:%5d,%5d\n,x,y);swap(&x,&y);printf(交换后:%5d,%5d\n,x,y);return0;}2019/9/9电气与信息工程学院计算机系制作分析栈区mainswapx:1y:4调用swapab执行:t=*a;*a=*b;*b=t;tx:1y:2结论:通过a,b找到了main中的x和y,使其交换了!2019/9/9电气与信息工程学院计算机系制作3地址2内存intx,y;变量y变量x2019/9/9电气与信息工程学院计算机系制作3地址2找到x,y的方法:1、通过名字找2、通过位置找如在电影院找人2019/9/9电气与信息工程学院计算机系制作3地址2程序中:inti;floatk;内存中每个字节有一个编号-----地址…...2000200120022005内存02003ik编译或函数调用时为其分配内存单元200420062007变量地址:变量所占字节的第一个地址变量i的地址是:2000变量k的地址是:20042019/9/9电气与信息工程学院计算机系制作3地址2如何得到变量的地址?&运算符:取变量的地址如果在程序中有变量x:&x则表示x的地址例1:观察程序:#includestdio.hintmain(){intx;printf(“x=%d,&x=%d”,x,&x);return0;}lesson17_01.c2019/9/9电气与信息工程学院计算机系制作3地址2如何表示地址指针类型指针类型是C语言提供的一种特殊的基本数据类型,表示变量的地址。指针类型变量中存放的不是待操作的数据,而是那些待操作数据(变量)的存储地址。2019/9/9电气与信息工程学院计算机系制作3地址2如何保存变量的地址?定义相应变量保存---如果一个变量用来保存另一个变量的地址,叫指针变量定义方法:类型名*指针变量名例:int*pi;float*pf;该变量可以放哪种类型的变量的地址标志,表示后面的变量是一个指针变量变量的名字,必须是合法标志符2019/9/9电气与信息工程学院计算机系制作3指针3使用指针变量保存变量的地址intx=0,y=7;int*p;p=&x;20000xp2000p指向变量x所以地址也叫做指针!2019/9/9电气与信息工程学院计算机系制作3指针3访问变量的第二种方法*运算符:指针所指向的变量例2:观察程序:#includestdio.hintmain(){intx=0;int*p;p=&x;*p+=1;printf(“x=%d,*p=%d”,x,*p);}0x2000pp指向变量x2000*p就是xlesson17_02.c2019/9/9电气与信息工程学院计算机系制作3指针3指针与指针所指变量的关系*intptrintptr指针指针所指变量例如:int*intptr,a;intptr=&a;*intptr=30;scanf(“%d”,intptr);printf(“%d”,*intptr);2019/9/9电气与信息工程学院计算机系制作3指针3指针与结构体变量的关系structpoint_type{intx;/*x坐标*/inty;/*y坐标*/};structpoint_type*p;/*定义结构体类型的指针*/structpoint_typepoint;/*定义结构体的变量*/point.x=2;point.y=5;p=&point;25pointp2019/9/9电气与信息工程学院计算机系制作3指针3通过指针访问结构体变量的方法structpoint_type*p;/*定义结构体类型的指针*/structpoint_typepoint;/*定义结构体的变量*/p=&point;25pointp方法1:(*p).x=10;方法2:p-y=20;10202019/9/9电气与信息工程学院计算机系制作3指针3指针的应用例3:从键盘输入两个数,按从大到小输出2019/9/9电气与信息工程学院计算机系制作3指针3第一种方法:#includestdio.hintmain(){inta,b,t;scanf(“%d%d”,&a,&b);if(ab){t=a;a=b;b=t;}printf(“%d,%d\n”,a,b);return0;}1ab221lesson17_03_1.c2019/9/9电气与信息工程学院计算机系制作3指针3第二种方法:#includestdio.hintmain(){inta,b;int*p1,*p2;scanf(“%d%d”,&a,&b);if(ab){p1=&b;p2=&a;}else{p1=&a;p2=&b;}printf(“%d,%d\n”,*p1,*p2);return0;}1ab21p1p22lesson17_03_2.c2019/9/9电气与信息工程学院计算机系制作3课堂练习4使用指针的方法,从键盘输入三个数,输出最大值2019/9/9电气与信息工程学院计算机系制作3指针操作5指针的基本操作指针的初始化int*ptr1=&value;int*ptr2=NULL;NULL是一个特殊的值,是在stdio.h文件中定义的一个符号常量#defineNULL0它表示目前指针没有指向任何变量,通常将这种状态称为“空”指针。2019/9/9电气与信息工程学院计算机系制作3指针操作5指针的基本操作指针的赋值ptr2=ptr1;•可以将一个指针赋给另一个基类型相同的指针,其含义是两个指针在同一时刻指向同一个变量。2019/9/9电气与信息工程学院计算机系制作3指针操作5指针的比较•用来判断两个指针在同一时刻是否指向同一个变量,或者判断某个指针是否为“空”。•例如if(ptr1==NULL)return;指针的加减•指针和指针可以相减ptr1-ptr2;•指针可以和整数相加、减ptr1+1;•在利用指针访问数组元素的时候,应用这种操作移动指针十分便捷。NULL是已经定义好的一个常量就是02019/9/9电气与信息工程学院计算机系制作3指针与一维数组6数组名的含义inta[10]2000200420082012201620202024202820322036a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]各元素地址:数组名首元素的地址a表示a[0]的地址:即a的值为20002019/9/9电气与信息工程学院计算机系制作3指针与一维数组6例4:观察程序结果#includestdio.hintmain(){inta[10]={1,2,3,4,5,6,7,8,9,0};printf(“a=%d,&a[0]=%d\n”,a,&a[0]);printf(“a[0]=%d,*a=%d\n”,a[0],*a);return0;}lesson17_04.c2019/9/9电气与信息工程学院计算机系制作3指针与一维数组6inta[10];int*p;p=a;pa[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]2000200420082012201620202024202820322036p=&a[0];等价*pa[0]2000等价P是指针变量,可以保存变量的地址2019/9/9电气与信息工程学院计算机系制作3指针与一维数组6inta[10];int*p;p=a;pa[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]2000200420082012201620202024202820322036p=p+1;20002004p=p+1;不是使p的值加1而是使其指向下一个变量(元素)2019/9/9电气与信息工程学院计算机系制作3指针与一维数组6inta[10];int*p;p=a;pa[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]200020042008201220162020202420282032203620002004a[i]的几种表示方法:a[i]*(a+i)p[i]*(p+i)2019/9/9电气与信息工程学院计算机系制作3指针与一维数组6利用指针对数组元素进行操作假设有定义:intiarray[20],*ptr;ptr=iarray将数组iarray的内容显示输出方法1、for(ptr=iarray,i=0;i20;i++)printf(“%d“,*(ptr+i));方法2、for(ptr=iarray;ptriarray+20;ptr++)printf(“%d“,*ptr);2019/9/9电气与信息工程学院计算机系制作3指针与一维数组6利用指针对数组元素进行操作假设有定义:intiarray[20],*ptr;ptr=iarray将数组iarray的内容显示输出方法3、for(i=0;i20;i++)printf(“%d“,*(iarray+i));方法4、for(ptr=iarray,i=0;i20;i++)printf(“%d“,ptr[i]);2019/9/9电气与信息工程学院计算机系制作3指针与一维数组6例5:从键盘上输入10个数,并输出#includestdio.hintmain(){inta[10];inti,*p=a;for(i=0;i10;i++)scanf(“%d”,p+i);for(i=0;i10;i++)printf(“%6d”,*(p+i));return0;}lesson17_05.c2019/9/9电气与信息工程学院计算机系制作3课堂练习7使用指针的方法,从键盘输入10个数,保存在数组中,并将其逆序后输出2019/9/9电气与信息工程学院计算机系制作3课堂练习7使用指针的方法,从键盘输入10个数,求其平均值2019/9/9电气与信息工程学院计算机系制作3课后练习8编写程序,从键盘输入一个整数,利用指针的方法计算其绝对值。编写程序,从键盘输入10个数,其最大值和最小值的差。

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功