c语言复合函数大括号,C语言复合函数3.ppt

本文详细介绍了C语言中的链表数据结构及其优势,包括动态分配存储空间和灵活的插入删除操作。同时,讨论了函数指针的概念,如何使用函数指针调用不同函数,以及在函数参数中的应用。通过实例展示了如何创建和操作链表,以及如何定义和使用指向结构体类型数据的指针。
摘要由CSDN通过智能技术生成

C语言复合函数3

第十一讲 再述指针 (第六章.C精华篇) 链表 什么是链表? 链表 为什么使用链表? 链表 插入结点 删除结点 二、 函数的指针及函数的指针变量 概念 函数的指针就是函数代码在内存中所占存储区的首地址。 函数的指针变量(指向函数的指针变量)存放函数的指针,用来指向某函数。p++, p+n 无意义。可以在不同时间用同一个指针变量调用不同函数。 指向函数的指针变量的定义 类型标示符 (*变量名) ( ); 例如: float (*p)( ); 表示 p是一个指向返回值为float 型的函数的指针变量。 运用 [例]求n!。 赋值形式:=; 调用形式:(*指向函数的指针变量)(实参表); (expfun.c) 用指向函数的指针变量作函数的参数。 在C语言中可以把指向函数的指针变量作为参数传递到其他函数。例如在有些程序中,用户可以从各种可供选择的选择项中选用他所需的操作,而各选项又是由一个独立的函数来实现的,在程序实现中就可以采用函数指针作参数的方式完成。 返回指针值的函数 定义 类型标示符 *函数名 ( 参数表 ); 例如: char *person ( char name[ ], char sex); 函数 person( ) 返回的指针指向 char 型量。 [例]编写一个strchr()函数,它的作用是在一个字符串中找一个指定的字符,返回该字符的地址。 # include "stdio.h"char *strch(char *str,char ch) { while(*str!=ch) str++; /* 查找指定字符的位置*/ return(str); /* 返回找到字符的地址*/ } 指针数组和二级指针 概念 数组的元素是指针变量。 定义: 类型标示符 *数组名 [ 数组长度 ] ; 例如: char *p[20] ; 定义了p[0] - -p[19] 计20个带下标的指针变量,都指向char 型量。 适合于处理字串。 二级指针 二次间接。 定义: **; 例如: int **p; 引用方式为:** [例1] main( ) {static char *name[ ]={“Turbo C”, “ANSI C”, “MS C”, “Visual C ”, ….) ; char **p=name; int i; for(i=0;i<10; i++) printf(“%s\n”, *p++); /* ? **p */ } * 指向结构体类型数据的指针 二级指针 main函数中的参数 指针再函数中的应用 兰州理工大学计算机与通信学院 指向结构体类型数据的指针 一、指向结构体类型变量的指针 [例] 打印通讯录。(excommu.c) 二、指向结构体数组的指针 [例]用结构指针建立一个图书检索系统。按书名检索。 (exsearch.c) 三、结构指针的使用 [例]链表。 链表的建立、遍历、查找、插入、删除操作。 线性表:有限个元素的有序集合。可用数组或链表表示。 数组和链表两 者都逻辑连续,但后者可以在空间不连续。 动态数据结构:其大小可变;动态分配存储空间。链表是最简单的一种,属于线性动态数据结构,树是非线性动态数据结构。 链表:链表中的一个元素称为一个结点或节点。每个结点由两部分组成:数据部分、指向上下结点的指针。靠这样的指针把各个结点串联起来构成链表。分单向、双向链表,后者可以两方向连接。 0 0 单向链表 双向链表 0 数据部分 1)不需要连续存储空间,可利用内存碎片; 2)插入删除元素不需移动其它元素,处理速度快; 3)动态分配存储空间,不必以最大可能长度预定存储空间,且可以随意扩充表的容量。 动态分配存储空间(使用函数) void *malloc(unsigned size)函数(memory allocation):在内存的动态存储区中分配一个长度为size的连续空间,size为结点元素各成员项的总字节数,可以用sizeof(数据类型名)运算符获得。该函数的返回值是一个指针,它的值是所分配存储区的起始地址,当该函数未成功执行时,返回值为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值