《C语言回顾指针》PPT课件.ppt_第1页
《C语言回顾指针》PPT课件.ppt_第2页
《C语言回顾指针》PPT课件.ppt_第3页
《C语言回顾指针》PPT课件.ppt_第4页
《C语言回顾指针》PPT课件.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

字符指针,讲授人:周俏丽,变量 指针 数组,Int c10;,Int a;,Int *P;,a=6;,P=c;,C0=6;,6,6,2000,C1=7;,7,数组取值操作:,数组的首地址赋予指向数组的指针变量。 例如:int a5 , *pa; pa = a; (数组名表示数组的首地址,故可赋予指向数组的指针变量pa) 也可写为: pa= /*数组第一个元素的地址也是整个数组的首地址,也可赋予pa*/,把字符串的首地址赋予指向字符类型的指针变量。例如:char *pc;pc=“c language“; 这里应说明的是并不是把整个字符串装入指针变量, 而是把存放该字符串的字符数组的首地址装入指针变量。 做为函数的实参和形参。 main() char *pc,*pb; pc=“c language“; strcpy(pc,pb); ,Void strcpy(char *from, char *to) ,字符指针变量和字符数组的区别,字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串的首地址),决不是将字符串放到字符指针变量中. char c10; char *p;,1 bytes,2.赋值方式,字符数组 char str14; str=“I love China!” (错误) char str14=“I love China!”; (正确) 字符指针 char *a; a=“I love China!”; a不是字符,而是字符串的首地址;,3.对字符指针变量赋初值,char *a =“I love China!”;等价于 char *a; a=“I love China!”; 而对数组的初始化: char str14=“I love China!”;不能等价于 char str14; str=“I love China!” 数组可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值.,4.分配内存,如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址.而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个地址值,也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据. char str10; scanf(“%s”, str); char *a; scanf(“%s”, a); char *a, str10; a=str; scanf(“%s”,a);,5.指针变量的值是可以改变的,Main() char *a=“I love China!”; a=a+7; printf(“%s”,a); 运行结果如下: China! 数组名是不能改变的 char str =“I love China!”; str=str+7; printf(“%S”,str); (错误),若定义了一个指针变量,并使它指向一个字符串,就可以用下标的形式引用指针变量所指的字符串中的字符,main() char *a=“I love China!”; printf(“The sixth charcter is %cn”,a5); 运行结果如下: The sixth charcter is e 程序中虽然并未定义数组a,但字符串在内存中是以字符数组形式存放的.a5按*(a+5)执行,取出其单元中的值.,6.用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串,char * format; format=“a=%d,b=%fn”; printr(format,a,b); 它相当于: printf( “a=%d,b=%fn”,a,b); 但是不能采用赋值语句对数组整体赋值 char format =“a=%d,b=%fn”; printf(format,a,b);(错误),指针的加减算术运算,对于指向数组的指针变量,可以加上或减去一个整数n。 例如:设pa是指向数组a的指针变量, 则 pa+n, pa-n, pa+, +pa, pa-, -pa; 运算都是合法的。,指针变量加或减一个整数n的意义是把指针指向的当前位置(指向某数组元素)向前或向后移动n个位置。,应该注意,数组指针变量向前或向后移动一个位置和地址加1或减1 在概念上是不同的。因为数组可以有不同的类型, 各种类型的数组元素所占的字节长度是不同的。如指针变量加1,即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1。 例如: int a5,*pa; pa=a; /*pa指向数组a,也是指向a0*/ pa=pa+2; /*pa指向a2,即pa的值为&pa2*/ 注:指针变量的加减运算只能对数组指针变量进行, 对指向其它类型变量的指针变量作加减运算是毫无意义的。,(3)两个指针变量之间的运算 只有指向同一数组的两个指针变量之间才能进行运算, 否则运算毫无意义。 两指针变量相减 两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。实际上是两个指针值(地址) 相减之差再除以该数组元素的长度(字节数)。例如pf1和pf2 是指向同一浮点数组的两个指针变量,设pf1的值为2010H,pf2的值为2000H,而浮点数组每个元素占4个字节,所以pf1-pf2的结果为(2000H-2010H)/4=4,表示pf1和 pf2之间相差4个元素。两个指针变量不能进行加法运算。 例如, pf1+pf2是什么意思呢?毫无实际意义。,两指针变量进行关系运算 指向同一数组的两指针变量进行关系运算可表示它们所指数组元素之间的关系。 例如: pf1=pf2表示pf1和pf2指向同一数组元素 pf1pf2表示pf1处于高地址位置 pf1pf2表示pf2处于低地址位置 指针变量还可以与0比较。 例如:设p为指针变量,则p=0表明p是空指针,它不指向任何变量;p!=0表示p不是空指针。,例如:#define NULL 0 int *p=NULL; 注意:对指针变量赋0值和不赋值是不同的。指针变量未赋值时,可以是任意值,是不能使用的。否则将造成意外错误。而指针变量赋0值后,则可以使用,只是它不指向具体的变量而已。,数组指针变量的说明和使用,指向数组的指针变量称为数组指针变量。 在讨论数组指针变量需要明确几个关系: 一个数组是由连续的一块内存单元组成的。 数组名就是这块连续内存单元的首地址。 一个数组也是由各个数组元素(下标变量) 组成的。 每个数组元素按其类型不同占有几个连续的内存单元。 一个数组元素的首地址也是指它所占有的几个内存单元的首地址。,char *p, a10;,一个指针变量既可以指向一个数组,也可以指向一个数组元素, 可把数组名或第一个元素的地址赋予它。 p=a; p=,0,顺序映像的 C 语言描述,typedef struct ElemType *elem; / 存储空间基址 int length; / 当前长度 int listsize; / 当前分配的存储容量 / (以sizeof(ElemType)为单位) SqList; / 俗称 顺序表,变量,0,typedef struct ElemType *elem; / 存储空间基址 int length; / 当前长度 int listsize; / 当前分配的存储容量 / (以sizeof(ElemType)为单位) SqList; Sqlist L; Status InitList_Sq( SqList,L.length-1,取第三个位置的元素:,L.elem3-1;,取第i个位置元素的地址:,&(L.elemi-1),Sqlist *p;,*(p+2),p = L.elem;,p+i-1,例如:ListInsert_Sq(L, 5, 66),L.length-1,0,87,56,42,66,q = / 插入e,链表结点的结构体,struct LNode int data; / 数据域 struct Lnode *next; / 指针域 LNode, *LinkList;,LinkList head; head = (LinkList) malloc (sizeof(ListNode);,内存状态,head = (LinkList) malloc (sizeof(ListNode),链表插入基于顺序表的尾插入原理,X,X,能否利用顺序表的尾插入,实现任意位置的插入操作?,关键问题:是如何保持数据间的逻辑线性关系?,该方法浪费了一定的空间,但提升插入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论