




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2022/12/19电气与信息工程学院计算机系制作Lesson17数据的组织结构2022/12/16电气与信息工程学院计算机系制作Lesso2022/12/19电气与信息工程学院计算机系制作学习目标:31掌握指针概念2022/12/16电气与信息工程学院计算机系制作学习目标:2022/12/19电气与信息工程学院计算机系制作引例#include<stdio.h>voidswap(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;}2022/12/16电气与信息工程学院计算机系制作引例#in2022/12/19电气与信息工程学院计算机系制作分析栈区mainswapx:1y:4调用swapab执行:t=*a;*a=*b;*b=t;tx:1y:2结论:通过a,b找到了main中的x和y,使其交换了!2022/12/16电气与信息工程学院计算机系制作分析栈区m2022/12/19电气与信息工程学院计算机系制作3地址2内存intx,y;变量y变量x2022/12/16电气与信息工程学院计算机系制作3地址2内2022/12/19电气与信息工程学院计算机系制作3地址2找到x,y的方法:1、通过名字找2、通过位置找如在电影院找人2022/12/16电气与信息工程学院计算机系制作3地址2找2022/12/19电气与信息工程学院计算机系制作3地址2程序中:inti;
floatk;内存中每个字节有一个编号-----地址…...2000200120022005内存02003ik
编译或函数调用时为其分配内存单元200420062007
变量地址:变量所占字节的第一个地址
变量i的地址是:2000变量k的地址是:20042022/12/16电气与信息工程学院计算机系制作3地址2程2022/12/19电气与信息工程学院计算机系制作3地址2如何得到变量的地址?&运算符:
取变量的地址如果在程序中有变量x:&x则表示x的地址例1:观察程序:#include<stdio.h>intmain(){intx;printf(“x=%d,&x=%d”,x,&x);return0;}lesson17_01.c2022/12/16电气与信息工程学院计算机系制作3地址2如2022/12/19电气与信息工程学院计算机系制作3地址2如何表示地址指针类型
指针类型是C语言提供的一种特殊的基本数据类型,表示变量的地址。指针类型变量中存放的不是待操作的数据,而是那些待操作数据(变量)的存储地址。
2022/12/16电气与信息工程学院计算机系制作3地址2如2022/12/19电气与信息工程学院计算机系制作3地址2如何保存变量的地址?
定义相应变量保存---如果一个变量用来保存另一个变量的地址,叫指针变量定义方法:类型名*
指针变量名例:int*pi;float*pf;
该变量可以放哪种类型的变量的地址
标志,表示后面的变量是一个指针变量
变量的名字,必须是合法标志符2022/12/16电气与信息工程学院计算机系制作3地址2如2022/12/19电气与信息工程学院计算机系制作3指针3使用指针变量保存变量的地址intx=0,y=7;int*p;p=&x;20000xp2000p指向变量x所以地址也叫做指针!2022/12/16电气与信息工程学院计算机系制作3指针3使2022/12/19电气与信息工程学院计算机系制作3指针3访问变量的第二种方法*运算符:
指针所指向的变量例2:观察程序:#include<stdio.h>intmain(){intx=0;int*p;p=&x;*p+=1;printf(“x=%d,*p=%d”,x,*p);}0x2000pp指向变量x2000*p就是xlesson17_02.c2022/12/16电气与信息工程学院计算机系制作3指针3访2022/12/19电气与信息工程学院计算机系制作3指针3指针与指针所指变量的关系
例如:
int*intptr,a;intptr=&a;*intptr=30;scanf(“%d”,intptr);printf(“%d”,*intptr);2022/12/16电气与信息工程学院计算机系制作3指针3指2022/12/19电气与信息工程学院计算机系制作3指针3指针与结构体变量的关系
structpoint_type{intx;/*x坐标*/inty;/*y坐标*/};structpoint_type*p;/*定义结构体类型的指针*/structpoint_typepoint;/*定义结构体的变量*/point.x=2;point.y=5;p=&point;25pointp2022/12/16电气与信息工程学院计算机系制作3指针3指2022/12/19电气与信息工程学院计算机系制作3指针3通过指针访问结构体变量的方法structpoint_type*p;/*定义结构体类型的指针*/structpoint_typepoint;/*定义结构体的变量*/p=&point;25pointp方法1:(*p).x=10;方法2:p->y=20;10202022/12/16电气与信息工程学院计算机系制作3指针3通2022/12/19电气与信息工程学院计算机系制作3指针3指针的应用例3:从键盘输入两个数,按从大到小输出2022/12/16电气与信息工程学院计算机系制作3指针3指2022/12/19电气与信息工程学院计算机系制作3指针3第一种方法:#include<stdio.h>intmain(){inta,b,t;scanf(“%d%d”,&a,&b);if(a<b){t=a;a=b;b=t;}printf(“%d,%d\n”,a,b);return0;}1ab221lesson17_03_1.c2022/12/16电气与信息工程学院计算机系制作3指针3第2022/12/19电气与信息工程学院计算机系制作3指针3第二种方法:#include<stdio.h>intmain(){inta,b;int*p1,*p2;scanf(“%d%d”,&a,&b);if(a<b){p1=&b;p2=&a;}else{p1=&a;p2=&b;}printf(“%d,%d\n”,*p1,*p2);return0;}1ab21p1p22lesson17_03_2.c2022/12/16电气与信息工程学院计算机系制作3指针3第2022/12/19电气与信息工程学院计算机系制作3课堂练习4使用指针的方法,从键盘输入三个数,输出最大值2022/12/16电气与信息工程学院计算机系制作3课堂练习2022/12/19电气与信息工程学院计算机系制作3指针操作5指针的基本操作
指针的初始化int*ptr1=&value;int*ptr2=NULL;
NULL是一个特殊的值,是在stdio.h文件中定义的一个符号常量#defineNULL0它表示目前指针没有指向任何变量,通常将这种状态称为“空”指针。2022/12/16电气与信息工程学院计算机系制作3指针操作2022/12/19电气与信息工程学院计算机系制作3指针操作5指针的基本操作
指针的赋值ptr2=ptr1;
可以将一个指针赋给另一个基类型相同的指针,其含义是两个指针在同一时刻指向同一个变量。2022/12/16电气与信息工程学院计算机系制作3指针操作2022/12/19电气与信息工程学院计算机系制作3指针操作5指针的比较用来判断两个指针在同一时刻是否指向同一个变量,或者判断某个指针是否为“空”。例如if(ptr1==NULL)return;指针的加减指针和指针可以相减ptr1-ptr2;指针可以和整数相加、减ptr1+1;在利用指针访问数组元素的时候,应用这种操作移动指针十分便捷。
NULL是已经定义好的一个常量就是02022/12/16电气与信息工程学院计算机系制作3指针操作2022/12/19电气与信息工程学院计算机系制作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的值为20002022/12/16电气与信息工程学院计算机系制作3指针与一2022/12/19电气与信息工程学院计算机系制作3指针与一维数组6例4:观察程序结果#include<stdio.h>intmain(){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.c2022/12/16电气与信息工程学院计算机系制作3指针与一2022/12/19电气与信息工程学院计算机系制作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是指针变量,可以保存变量的地址2022/12/16电气与信息工程学院计算机系制作3指针与一2022/12/19电气与信息工程学院计算机系制作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而是使其指向下一个变量(元素)2022/12/16电气与信息工程学院计算机系制作3指针与一2022/12/19电气与信息工程学院计算机系制作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)2022/12/16电气与信息工程学院计算机系制作3指针与一2022/12/19电气与信息工程学院计算机系制作3指针与一维数组6利用指针对数组元素进行操作假设有定义:intiarray[20],*ptr;ptr=iarray将数组iarray的内容显示输出方法1、for(ptr=iarray,i=0;i<20;i++)
printf(“%d“,*(ptr+i));方法2、for(ptr=iarray;ptr<iarray+20;ptr++)
printf(“%d“,*ptr);2022/12/16电气与信息工程学院计算机系制作3指针与一2022/12/19电气与信息工程学院计算机系制作3指针与一维数组6利用指针对数组元素进行操作假设有定义:intiarray[20],*ptr;ptr=iarray将数组iarray的内容显示输出方法3、for(i=0;i<20;i++)
printf(“%d“,*(iarray+i));方法4、for(ptr=iarray,i=0;i<20;i++)
printf(“%d“,ptr[i]);2022/12/16电气与信息工程学院计算机系制作3指针与一2022/12/19电气与信息工程学院计算机系制作3指针与一维数组6例5:从键盘上输入10个数,并输出#include<stdio.h>intmain(){inta[10];inti,*p=a;for(i=0;i<10;i++)scanf(“%d”,p+i);for(i=0;i<10;i++)printf(“%6d”,*(p+i));return0;}lesson17_05.c2022/12/16电气与信息工程学院计算机系制作3指针与一2022/12/19电气与信息工程学院计算机系制作3课堂练习7使用指针的方法,从键盘输入10个数,保存在数组中,并将其逆序后输出2022/12/16电气与信息工程学院计算机系制作3课堂练习2022/12/19电气与信息工程学院计算机系制作3课堂练习7使用指针的方法,从键盘输入10个数,求其平均值2022/12/16电气与信息工程学院计算机系制作3课堂练习2022/12/19电气与信息工程学院计算机系制作3课后练习8编写程序,从键盘输入一个整数,利用指针的方法计算其绝对值。编写程序,从键盘输入10个数,其最大值和最小值的差。
2022/12/16电气与信息工程学院计算机系制作3课后练习2022/12/19电气与信息工程学院计算机系制作Lesson17数据的组织结构2022/12/16电气与信息工程学院计算机系制作Lesso2022/12/19电气与信息工程学院计算机系制作学习目标:31掌握指针概念2022/12/16电气与信息工程学院计算机系制作学习目标:2022/12/19电气与信息工程学院计算机系制作引例#include<stdio.h>voidswap(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;}2022/12/16电气与信息工程学院计算机系制作引例#in2022/12/19电气与信息工程学院计算机系制作分析栈区mainswapx:1y:4调用swapab执行:t=*a;*a=*b;*b=t;tx:1y:2结论:通过a,b找到了main中的x和y,使其交换了!2022/12/16电气与信息工程学院计算机系制作分析栈区m2022/12/19电气与信息工程学院计算机系制作3地址2内存intx,y;变量y变量x2022/12/16电气与信息工程学院计算机系制作3地址2内2022/12/19电气与信息工程学院计算机系制作3地址2找到x,y的方法:1、通过名字找2、通过位置找如在电影院找人2022/12/16电气与信息工程学院计算机系制作3地址2找2022/12/19电气与信息工程学院计算机系制作3地址2程序中:inti;
floatk;内存中每个字节有一个编号-----地址…...2000200120022005内存02003ik
编译或函数调用时为其分配内存单元200420062007
变量地址:变量所占字节的第一个地址
变量i的地址是:2000变量k的地址是:20042022/12/16电气与信息工程学院计算机系制作3地址2程2022/12/19电气与信息工程学院计算机系制作3地址2如何得到变量的地址?&运算符:
取变量的地址如果在程序中有变量x:&x则表示x的地址例1:观察程序:#include<stdio.h>intmain(){intx;printf(“x=%d,&x=%d”,x,&x);return0;}lesson17_01.c2022/12/16电气与信息工程学院计算机系制作3地址2如2022/12/19电气与信息工程学院计算机系制作3地址2如何表示地址指针类型
指针类型是C语言提供的一种特殊的基本数据类型,表示变量的地址。指针类型变量中存放的不是待操作的数据,而是那些待操作数据(变量)的存储地址。
2022/12/16电气与信息工程学院计算机系制作3地址2如2022/12/19电气与信息工程学院计算机系制作3地址2如何保存变量的地址?
定义相应变量保存---如果一个变量用来保存另一个变量的地址,叫指针变量定义方法:类型名*
指针变量名例:int*pi;float*pf;
该变量可以放哪种类型的变量的地址
标志,表示后面的变量是一个指针变量
变量的名字,必须是合法标志符2022/12/16电气与信息工程学院计算机系制作3地址2如2022/12/19电气与信息工程学院计算机系制作3指针3使用指针变量保存变量的地址intx=0,y=7;int*p;p=&x;20000xp2000p指向变量x所以地址也叫做指针!2022/12/16电气与信息工程学院计算机系制作3指针3使2022/12/19电气与信息工程学院计算机系制作3指针3访问变量的第二种方法*运算符:
指针所指向的变量例2:观察程序:#include<stdio.h>intmain(){intx=0;int*p;p=&x;*p+=1;printf(“x=%d,*p=%d”,x,*p);}0x2000pp指向变量x2000*p就是xlesson17_02.c2022/12/16电气与信息工程学院计算机系制作3指针3访2022/12/19电气与信息工程学院计算机系制作3指针3指针与指针所指变量的关系
例如:
int*intptr,a;intptr=&a;*intptr=30;scanf(“%d”,intptr);printf(“%d”,*intptr);2022/12/16电气与信息工程学院计算机系制作3指针3指2022/12/19电气与信息工程学院计算机系制作3指针3指针与结构体变量的关系
structpoint_type{intx;/*x坐标*/inty;/*y坐标*/};structpoint_type*p;/*定义结构体类型的指针*/structpoint_typepoint;/*定义结构体的变量*/point.x=2;point.y=5;p=&point;25pointp2022/12/16电气与信息工程学院计算机系制作3指针3指2022/12/19电气与信息工程学院计算机系制作3指针3通过指针访问结构体变量的方法structpoint_type*p;/*定义结构体类型的指针*/structpoint_typepoint;/*定义结构体的变量*/p=&point;25pointp方法1:(*p).x=10;方法2:p->y=20;10202022/12/16电气与信息工程学院计算机系制作3指针3通2022/12/19电气与信息工程学院计算机系制作3指针3指针的应用例3:从键盘输入两个数,按从大到小输出2022/12/16电气与信息工程学院计算机系制作3指针3指2022/12/19电气与信息工程学院计算机系制作3指针3第一种方法:#include<stdio.h>intmain(){inta,b,t;scanf(“%d%d”,&a,&b);if(a<b){t=a;a=b;b=t;}printf(“%d,%d\n”,a,b);return0;}1ab221lesson17_03_1.c2022/12/16电气与信息工程学院计算机系制作3指针3第2022/12/19电气与信息工程学院计算机系制作3指针3第二种方法:#include<stdio.h>intmain(){inta,b;int*p1,*p2;scanf(“%d%d”,&a,&b);if(a<b){p1=&b;p2=&a;}else{p1=&a;p2=&b;}printf(“%d,%d\n”,*p1,*p2);return0;}1ab21p1p22lesson17_03_2.c2022/12/16电气与信息工程学院计算机系制作3指针3第2022/12/19电气与信息工程学院计算机系制作3课堂练习4使用指针的方法,从键盘输入三个数,输出最大值2022/12/16电气与信息工程学院计算机系制作3课堂练习2022/12/19电气与信息工程学院计算机系制作3指针操作5指针的基本操作
指针的初始化int*ptr1=&value;int*ptr2=NULL;
NULL是一个特殊的值,是在stdio.h文件中定义的一个符号常量#defineNULL0它表示目前指针没有指向任何变量,通常将这种状态称为“空”指针。2022/12/16电气与信息工程学院计算机系制作3指针操作2022/12/19电气与信息工程学院计算机系制作3指针操作5指针的基本操作
指针的赋值ptr2=ptr1;
可以将一个指针赋给另一个基类型相同的指针,其含义是两个指针在同一时刻指向同一个变量。2022/12/16电气与信息工程学院计算机系制作3指针操作2022/12/19电气与信息工程学院计算机系制作3指针操作5指针的比较用来判断两个指针在同一时刻是否指向同一个变量,或者判断某个指针是否为“空”。例如if(ptr1==NULL)return;指针的加减指针和指针可以相减ptr1-ptr2;指针可以和整数相加、减ptr1+1;在利用指针访问数组元素的时候,应用这种操作移动指针十分便捷。
NULL是已经定义好的一个常量就是02022/12/16电气与信息工程学院计算机系制作3指针操作2022/12/19电气与信息工程学院计算机系制作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的值为20002022/12/16电气与信息工程学院计算机系制作3指针与一2022/12/19电气与信息工程学院计算机系制作3指针与一维数组6例4:观察程序结果#include<stdio.h>intmain(){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.c2022/12/16电气与信息工程学院计算机系制作3指针与一2022/12/19电气与信息工程学院计算机系制作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是指针变量,可以保存变量的地址2022/12/16电气与信息工程学院计算机系制作3指针与一2022/12/19电气与信息工程学院计算机系制作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而是使其指向下一个变量(元素)2022/12/16电气与信息工程学院计算机系制作3指针与一2022/12/19电气与信息工程学院计算机系制作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]200020042008201220162020202420282032
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小自考汉语言文学2024年真题试题及答案
- 小自考行政管理课程重点掌握题目及答案
- 应用案例商业分析师试题及答案
- 收纳思维模式试题及答案
- 3荷花(教学设计)-2023-2024学年语文三年级下册统编版
- Revision Module A (2)-教学设计2023-2024学年外研版英语八年级下册
- 系统分析师备考技巧与试题及答案解析
- 食品安全员心理素质试题及答案
- 第五单元 草原牧歌-《鸿雁》 教学设计 2024-2025学年人音版(简谱)(2024)初中音乐七年级上册
- 音调音色测试题及答案
- 团体心理辅导课件-团体辅导的理论和技术
- 2022岭南版美术中考试题及答案
- 通信原理第13章-同步原理全章课件
- 北京市室内装修合同范本(七篇)
- 2023年高中音乐课件春游(合唱)
- 通信原理 (完整)
- 新疆地方史模版2021
- 招标代理项目考核评分标准表
- 2023年陕西特岗学前教育学科真题真题
- 痕迹检验概述
- 国开电大本科《人文英语3》机考总题库
评论
0/150
提交评论