c语言指针(含例子)

上传人:tia****nde 文档编号:117076543 上传时间:2019-11-18 格式:PPT 页数:70 大小:1.08MB
返回 下载 相关 举报
c语言指针(含例子)_第1页
第1页 / 共70页
c语言指针(含例子)_第2页
第2页 / 共70页
c语言指针(含例子)_第3页
第3页 / 共70页
c语言指针(含例子)_第4页
第4页 / 共70页
c语言指针(含例子)_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《c语言指针(含例子)》由会员分享,可在线阅读,更多相关《c语言指针(含例子)(70页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计大赛培训之 指针 教学实践部计算机中心 胡晓丽 指针的用途 指针在C 语言里应用极为广泛,是C语言的灵魂 oo使程序简洁、紧凑、高效使程序简洁、紧凑、高效 oo函数调用时批量参数的传递函数调用时批量参数的传递 oo内存的动态分配内存的动态分配 oo内存地址的直接处理内存地址的直接处理 oo复杂数据结构的简洁表达复杂数据结构的简洁表达等许多其它数据类型 难以实现的复杂操作 培训目的 o掌握指针的概念、指针变量定义格式和引用 o掌握指针的运算方法 o指针应用举例 理解指针 指针 就是内存中的变量的地址 理解指针 o内存单元的编号:计算机内 存中,每一个字节的存储单 元都有一个编号(亦

2、称为内 存地址) o在VC中,内存单元的编号是 一个8位的十六进制数(表示 32位二进制数,VC是32位编 译系统) 如:0013FF7C 0013FF7C 0013FF7B 0013FF7A 0013FF79 0013FF00 理解指针 变量:实质是代表了“内存中的某个存储单元”。 若在内存中定义了一个变量,则这个变量的内存的地址也就确定了。 理解指针 变量的地址:表示变量在内存中的位置,其 值是该变量在内存中所占存储单元的首字节的编 号 程序中: int i; float k; 内存中每个字节有一个编号-地址 . 2000 2001 2002 2005 内存 0 2003 i k 编译或函

3、数调用时为其分配内存单元 变量是对程序中数据 存储空间的抽象 理解指针 oa在内存中占4个字节,但 a=8; printf(“%d %pn“,a, 0013FF7C00000000 0013FF7B00000000 0013FF7A00000000 0013FF7900001000 0013FF00 理解指针 理解指针 我们在程序中只需要指出变量名,无需知道每个变量 在内存中的具体地址,每个变量与具体地址的联系是 由C编译系统来完成的。对变量的存取操作就是对某 个存储单元进行操作。这种直接按变量的地址存取变 量值的方式称为“直接存取”。 4502 实 验 室 二 我有几种方法 可以到实验室 上

4、机? 2、按实验室所在的 教室编号 1、按实验室名字 按变量名 按变量地址 (即 指针) 实 验 室 一 实 验 室 三 4503 4707 理解指针 理解指针 指针:也是一种变量,这种变量是用来存放内存 地址的。 指针变量 o指针是 字节的编号,即地址。 o指针也是要存储的,因此每个指针也需要 一个变量来存储它。这个变量称为指针变 量。指针变量的值是某一定义好的变量的 地址。 理解指针变量 1011 a p 例:int *p; int a=3; 1012 2002 00000011 00000000 间接存取:这种通过变量p到变量a的地址, 然后再存取变量a的值的方式称为“间接存取”。 指针

5、变量p指向了变量a的含义是:指针p中存放了变量a的地址 。 指针变量的定义 定义形式如下: 数据类型 *指针变量名; 如: int *p1, num; o表示的意思为: 定义了一个指针变量p1,它指向的是一个整型数 据。或者说,这时候p1中存储的是一个整型变量 的地址。 o注意:指针变量定义了之后,需要给它赋一个确 定的变量的地址,否则,就会出现严重的系统错 误。 指针变量的引用 #include main() int a; /定义一个整型变量a int *p1; /定义指向整型变量的指针p1 p1= /p1中应存放变量a的地址 *p1=5; /通过指针变量p1给a赋值 printf(“a=%

6、d“, a); 例: int *p,*s,k=20; s= p= . 2000 2004 2006 2005 整型变量k 变量s 2001 2002 2003 变量p 2007 2008 20 2000 2000 2004 2004 s=*p k=*s 所以:k=*p 说明: (1)指针p的基类型是int 类型的指针。 (2)是求地址运算符。 (3)因为基本数据类型int 、float、char等所需存 储空间不同,所以需要 定义指针变量的基类型 。 例: 指针的概念 main() int a; int *pa= a=10; printf(“a:%dn“,a); printf(“*pa:%dn

7、“,*pa); printf(“ printf(“pa:%x(hex)n“,pa); printf(“ 运行结果: a:10 *pa:10 DD00 q=p+2; DD04 q+; DD06 q-; DD04 i=*p;11 j=*q; 33 例: 指针的运算方法 指针的比较 在关系表达式中,可以对指针进行比较。即两 个变量地址的比较。 通常两个或多个指针指向同一目标时(一串连 续的存储单元),比较才有意义。 指针应用举例-指针作为函数的参数 指针可以作为参数在主调函数和被调用函数之间 传递数据,通过指针可以在被调用函数中地调用 中的变量进行引用,这也就使得通过形参改变对 应实参的值有了可能,

8、利用此形式就可以把两个 或两个以上的数据从被调用的函数返回到调用函数。 例 将数从大到小输出 指针应用举例-指针作为函数的参数 swap(int x,int y) int temp; temp=x; x=y; y=temp; main() int a,b; scanf(“%d,%d“, if(adata =c; r-next =s; r=s; /*使r指向当前表尾*/ scanf(“%d“, r-next =0; /*置链表结束标志*/ return h; 0head h-next=0 指针应用举例-链表 (1)顺序访问链表中各结点的数据域 步骤: 指向指向一个结点 输出数据域的内容(重复上面

9、两步) 直到链表结束为止。数据域内容为0 例:编写函数print_slist,顺序输出单向链表各结点 数据域中的内容。 指针应用举例-链表 指针应用举例-链表 void print_slist(SLIST *head) SLIST *p; p=head-next ; /*p指向头结点后的第一个结点*/ if(p=0) printf(“Linklist is NULL!n“); else printf(“head“); do printf(“%d“,p-data ); /*输出当前结点数据域中的值*/ p=p-next ; while(p!=0); printf(“endn“); (2)在单向链

10、表中插入结点 s:用来指向新开辟的结点 p:指向插入的位置 q: p的前趋结点 x y qp s 链表非空,值为x结点存在,插在x 结点前 链表非空,值为x结点不存在,插在表尾 链表为空,插在表尾,即头结点之后。 s-next =p; q-next =s; 指针应用举例-链表 指针应用举例-链表 insert_snode(SLIST *head,int x,int y) SLIST *s,*p,*q; s=(SLIST*)malloc(sizeof(SLIST); s-data=y; /*在新结点中存入y的值*/ q=head; p=head-next ; /*指针初始化,p指向第一个结点*/

11、 while(p!=0) p=p-next ;/*q指向p的前趋结点*/ s-next =p; q-next =s; (3)删除单向链表中的结点 /87 qp 9 头结点 头指针 q-next=p-next 指针应用举例-链表 指针应用举例-链表 struct link *delete_link(struct link *head,int x) struct link *q,*p; q=head; p=head-next; while(p!=0) /*q始终指向m之前的结点*/ p=p-next; if(m=0) /*不存在符合条件的结点*/ printf(“can not exit!n”); else q-next=p-next; /*逻辑删除结点*/ free(m); /*物理删除结点*/ return(head);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号