《C语言回顾指针》PPT课件.ppt

《C语言回顾指针》PPT课件.ppt

ID:52269309

大小:420.51 KB

页数:24页

时间:2020-04-03

上传者:U-25935
《C语言回顾指针》PPT课件.ppt_第1页
《C语言回顾指针》PPT课件.ppt_第2页
《C语言回顾指针》PPT课件.ppt_第3页
《C语言回顾指针》PPT课件.ppt_第4页
《C语言回顾指针》PPT课件.ppt_第5页
资源描述:

《《C语言回顾指针》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

字符指针讲授人:周俏丽 变量指针数组Intc[10];Inta;Int*P;a=6;P=c;C[0]=6;63010a内存状态3000P内存状态c[0]c[1]c[2]c[9]….2000内存状态62000C[1]=7;7数组取值操作: 数组的首地址赋予指向数组的指针变量。例如:inta[5],*pa;pa=a;(数组名表示数组的首地址,故可赋予指向数组的指针变量pa)也可写为:pa=&a[0];/*数组第一个元素的地址也是整个数组的首地址,也可赋予pa*/ ⑤把字符串的首地址赋予指向字符类型的指针变量。例如:char*pc;pc="clanguage";这里应说明的是并不是把整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量。⑥做为函数的实参和形参。main(){char*pc,*pb;pc="clanguage";strcpy(pc,pb);}Voidstrcpy(char*from,char*to){……} 字符指针变量和字符数组的区别字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串的首地址),决不是将字符串放到字符指针变量中.charc[10];char*p;1bytesc[0]c[1]c[2]c[9]….200030002000P 2.赋值方式字符数组charstr[14];str=“IloveChina!”(错误)charstr[14]=“IloveChina!”;(正确)字符指针char*a;a=“IloveChina!”;a不是字符,而是字符串的首地址; 3.对字符指针变量赋初值char*a=“IloveChina!”;等价于char*a;a=“IloveChina!”;而对数组的初始化:charstr[14]=“IloveChina!”;不能等价于charstr[14];str=“IloveChina!”数组可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值. 4.分配内存如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址.而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个地址值,也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据.charstr[10];scanf(“%s”,str);char*a;scanf(“%s”,a);char*a,str[10];a=str;scanf(“%s”,a);c[0]c[1]c[2]c[9]….20003000a 5.指针变量的值是可以改变的Main(){char*a=“IloveChina!”;a=a+7;printf(“%s”,a);}运行结果如下:China!数组名是不能改变的charstr[]={“IloveChina!”};str=str+7;printf(“%S”,str);(错误) 若定义了一个指针变量,并使它指向一个字符串,就可以用下标的形式引用指针变量所指的字符串中的字符main(){char*a=“IloveChina!”;printf(“Thesixthcharcteris%c ”,a[5]);}运行结果如下:Thesixthcharcterise程序中虽然并未定义数组a,但字符串在内存中是以字符数组形式存放的.a[5]按*(a+5)执行,取出其单元中的值. 6.用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串char*format;format=“a=%d,b=%f ”;printr(format,a,b);它相当于:printf(“a=%d,b=%f ”,a,b);但是不能采用赋值语句对数组整体赋值charformat[]=“a=%d,b=%f ”;printf(format,a,b);(错误) 指针的加减算术运算对于指向数组的指针变量,可以加上或减去一个整数n。例如:设pa是指向数组a的指针变量,则pa+n,pa-n,pa++,++pa,pa--,--pa;运算都是合法的。指针变量加或减一个整数n的意义是把指针指向的当前位置(指向某数组元素)向前或向后移动n个位置。 应该注意,数组指针变量向前或向后移动一个位置和地址加1或减1在概念上是不同的。因为数组可以有不同的类型,各种类型的数组元素所占的字节长度是不同的。如指针变量加1,即向后移动1个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1。例如:inta[5],*pa;pa=a;/*pa指向数组a,也是指向a[0]*/pa=pa+2;/*pa指向a[2],即pa的值为&pa[2]*/注:指针变量的加减运算只能对数组指针变量进行,对指向其它类型变量的指针变量作加减运算是毫无意义的。 (3)两个指针变量之间的运算只有指向同一数组的两个指针变量之间才能进行运算,否则运算毫无意义。①两指针变量相减两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。实际上是两个指针值(地址)相减之差再除以该数组元素的长度(字节数)。例如pf1和pf2是指向同一浮点数组的两个指针变量,设pf1的值为2010H,pf2的值为2000H,而浮点数组每个元素占4个字节,所以pf1-pf2的结果为(2000H-2010H)/4=4,表示pf1和pf2之间相差4个元素。两个指针变量不能进行加法运算。例如,pf1+pf2是什么意思呢?毫无实际意义。 ②两指针变量进行关系运算指向同一数组的两指针变量进行关系运算可表示它们所指数组元素之间的关系。例如:pf1==pf2表示pf1和pf2指向同一数组元素pf1>pf2表示pf1处于高地址位置pf1=q;--p)*(p+1)=*p;*q=e;//插入ep 链表结点的结构体structLNode{intdata;//数据域structLnode*next;//指针域}LNode,*LinkList;nextdataLNode变量linklistLinkList指针变量LinkListhead;head=(LinkList)malloc(sizeof(ListNode));内存状态linklistheadhead=(LinkList)malloc(sizeof(ListNode))nextdata 链表插入基于顺序表的尾插入原理Xa1a2…ai-1ai…anX能否利用顺序表的尾插入,实现任意位置的插入操作?23…ii+1…^23…ii+1…^i23…n+1i+1…^i关键问题:是如何保持数据间的逻辑线性关系?该方法浪费了一定的空间,但提升插入删除等操作的效率。Y1n+2用于记录链表的头 例1线性表:(a1,a2,a3,a4,a5,a6,a7,a8)的单链表示意图如下:10111213┆5153data┆a4a6a7a3a8a1a5a2┆next┆┆54┆┆52a1a2…...a8^a3541310531112510p=L;j=0;while(p&&jnext;++j;}s=(LinkList)malloc(sizeof(ListNode));s->data=e;s->next=p->next;p->next=s;55eP->nexts-->i=41055p-->

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭