C语言程序设计基础 第10章 指针进阶 刘新国.

Slides:



Advertisements
Similar presentations
小学科学中的化学 武威十九中 刘玉香.
Advertisements

第九章 指针 西安工程大学.
第七章 指针 计算机公共教学部.
第7章 指针 存储地址的变量的类型就是指针类型 能直接对内存地址操作, 实现动态存储管理 容易产生副作用, 初学者常会出错
第七章 指针 教 材: C程序设计导论 主 讲: 谭 成 予 武汉大学计算机学院.
计算机三级考试C语言上机试题专题.
二级指针与二维数组.
10.1 二级指针 10.2 指针与二维数组 10.3 指针的动态存储分配 10.4 函数指针 10.5 main函数的参数
第8章 指针 21世纪高等学校精品规划教材.
Chap 11 指针进阶 11.1 奥运五环色 11.2 字符定位 11.3 用链表构建学生信息库.
補充: Input from a text file
第6章 指针 6.1 指针的概念 6.2 变量与指针 6.3 数组与指针 6.4 字符串与指针 6.5 函数与指针 6.6 返回指针值的函数
6.4 字符串与指针 1. 用字符数组存放一个字符串.
考试情况 考试安排 试卷题型及预估分值 2013年12月28日上午8:30~10:30,东区5401,5402教室 闭卷笔试
第六节 二维数组和指针 二维数组的地址 对于一维数组: (1)数组名array表示数组的首地址, 即array[0]的地址;
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
专题研讨课二: 数组在解决复杂问题中的作用
第九章 字符串.
第一章 程序设计入门.
第6章 指针 学习目的与要求: 了解指针的概念和相关术语 熟练掌握指向变量、数组和字符串的指针变量的使用方法 了解指向函数的指针变量
第二章 C# 基础知识.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第 十 章 指 针.
C语言高级编程(第四部分) 字符串 北京大学 信息科学技术学院.
第7章 间接访问—指针 指针的概念 指针运算与数组 动态内存分配 字符串再讨论 指针作为函数参数和返回值 指针数组与多级指针
程序设计专题 第2讲 - 结构 刘新国.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
Chap 11 指针进阶 11.1 布袋中的彩色球 11.2 解密藏头诗 11.3 学生信息管理的链表实现.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
函数申明、定义、调用 申明: void sort(float a[], int n); void sort(float *a, int m); void sort(float *a, int); void sort(float *, int);
二维数组的指针表示 与复杂的指针例子 专题研讨课之三.
六頂 思考 帽 SIX THINKING HATS 組員:李冠興 李啟銘 粘婉菁.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
C语言 程序设计基础与试验 刘新国、2012年秋.
C语言程序设计基础 第8章 指针 刘新国.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
欲穷千里,更上层楼 第十章 指 针 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环,
第五章 习题课 电子信息与计算机科学系 曾庆尚.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
7.1 广义表的概念 广义表是n(n≥0)个数据元素组成的序列,其中每个数据元素或是单个数据元素(简称原子),或仍然是一个广义表 。
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C语言复习3----指针.
C语言大学实用教程 第7章 指针 西南财经大学经济信息工程学院 刘家芬
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
C qsort.
第4章 数 组.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
静定结构位移计算 ——互等定理 主讲教师:戴萍.
第二章 类型、对象、运算符和表达式.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
函数申明、定义、调用 申明: void sort(float a[], int n); void sort(float *a, int m); void sort(float *a, int); void sort(float *, int);
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第四章 函数 丘志杰 电子科技大学 计算机学院 软件学院.
本节内容 指针类型.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
本节内容 指针类型的使用 视频提供:昆山爱达人信息技术有限公司.
結構、檔案處理(Structure, File)
C语言程序设计 第8章 指针.
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第2章 Java语言基础.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
第八章 指 针 北京邮电大学出版社.
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
(注意)表示的飽和度、亮度是基準值。因為色頻的關係,有可能有所調整。
本节内容 this指针 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Presentation transcript:

C语言程序设计基础 第10章 指针进阶 刘新国

本章要点 指针数组和指向指针的指针 指针作为函数的返回值 指向函数的指针 指向结构的指针 对链表数据结构

指针数组 char * color[5] = { “red”, “blue”, “yellow”, “green”, “black” };

11.1.2 指针数组的概念 首先,它是一个数组 其次,它的元素是指针 定义格式 类型名 *数组名[长度]; 遵循数组的定义语法 只不过,元素类型为指针类型

指针数组 char * color[5] = { “red”, “blue”, “yellow”, “green”, “black” }; for( i=0; i<5; i++ ) printf("%d-th color = %s\n", i, color[i]); color[0] color[1] color[2] color[3] color[4] red\0 blue\0 yellow\0 green\0 black\0

指针数组 char * color[5] = { “red”, “blue”, “yellow”, “green”, “black” }; char *t = color[0]; color[0] = color[4]; color[4] = t; 对一般数组的操作,适合于指针数组 定义,初始化,元素的使用,赋值 color[0] color[1] color[2] color[3] color[4] red\0 blue\0 yellow\0 green\0 black\0

指向指针的指针(二级指针) int a = 10; int *p = &a; int **pp = &p; 定义语法格式 类型名 **指针变量名; a 10 *pp *p **pp

指向指针的指针(二级指针) 二级(多级)指针都是指针 可以应用指针的所有操作 定义、初始化、赋值 和数组结合使用 特殊的是:它指向一个指针

三级指针和多级指针 三级指针 四级指针 int a = 10, *p= &a, **pp = &p int ***p3 = &pp;

指针数组和二级指针 red\0 color[0] color blue\0 color[1] yellow\0 color[2] char * color[5] = { “red”, “blue”, “yellow”, “green”, “black” }; 数组名color是一指针, 指向首元素color[0]。 char **pc = color; char str[20]; scanf(“%s”, str); for ( i=0; i<5; i++ ) if( strcmp(str, *(pc+i))==0 ) break; if(i<5) printf(“color id = %d\n”,i); else printf(“not found\n”); color[0] color[1] color[2] color[3] color[4] red\0 blue\0 yellow\0 green\0 black\0 color pc pc[i]

11.1.4 指针数组与二维数组 ccolor pcolor[0] pcolor[1] pcolor[2] pcolor[3] red\0 blue\0 yellow\0 green\0 black\0 r e d \0 b l u y o w g n a c k char ccolor[][7] = { “red”, “blue”, “yellow”, “green”, “black” }; char * pcolor[5] = { “red”, “blue”,

11.1.4 指针数组与二维数组 ccolor pcolor[0] pcolor[1] pcolor[2] pcolor[3] red\0 blue\0 yellow\0 green\0 black\0 r e d \0 b l u y o w g n a c k pcolor[i]指向一个字符串,即该字符串首个字符 pcolor[i] + k 则指向该字符串的第k个字符 所以 *(pcolor[i] + k)就是该字符,也可以写作 pcolor[i][k] 注意:pcolor不是二维数组

[例11-4] 字符串排序 #define SWAP(a,b,t) t=a,a=b,b=t void fsort(char* color[], int n) { int k, j; char * tmp; for( k=1; k<n; k++ ) for( j=0; j<n-k; j++ ) if( strcmp(color[j],color[j+1])>0 ) SWAP (color[j], color[j+1], tmp); }

主程序 pcolor[0] pcolor[1] pcolor[2] pcolor[3] pcolor[4] red\0 blue\0 yellow\0 green\0 black\0 pcolor[0] pcolor[1] pcolor[2] pcolor[3] pcolor[4] red\0 blue\0 yellow\0 green\0 black\0 主程序 void main() { char *pcolor[5]={“red”, blue”, “yellow”, “green”, “black”}; int k; fsort(pcolor,5); for( k=0; k<5; k++ ) printf(“%s”, pcolor[k]); }

[例11-6] 藏头诗解密 相邻的两个字符对应一个中文字符 void main() { char *poem[4]={“一叶轻舟向东流”,“帆梢轻握杨柳手”, “风纤碧波微起舞”,“顺水任从雅客悠”}; char mean[10]; int i; for( i=0; i<4; i++ ) mean[2*i] = *(poem[i]); mean[2*i+1] = *(poem[i]+1); } mean[2*i] = ‘\0’; printf(“%s\n”, mean); 相邻的两个字符对应一个中文字符

11.2 字符定位 char * match(char *s, char ch) { while (*s) if( *s==ch ) return s; else s++; return NULL; } 指针作为函数的返回值 返回的指针必须是合法的指针。

11.2 字符定位(错误) char * match(char ch) { char str[] = “university”; char * s = str; while (*s) if( *s==ch ) return s; else s++; return NULL; } void main() { char * r; r = match(‘v’); if( r ) printf(“%s”, r); } 返回的指针不合法!!

11.2.3 函数指针 指向函数的指针。定义语法格式 类型名 (*变量名)(参数类型表); 例如 int (*funptr)(float, double); 定义了一个函数指针, 它的类型是一个指针, 可以存储一个“返回值是int, 有两个分别是float和doulbe参数的函数” 的地址

11.2.3 函数指针 函数名字本身可以作为函数指针使用 编译器不区分: add 和 &add fp 和 (*fp) int add(int a, int b) { return (a+b); } void main() int x, y; int (*fp)(int,int); fp = add; fp = &add; x = fp(3, 4); y = (*fp)(5, x); 函数名字本身可以作为函数指针使用 编译器不区分: add 和 &add fp 和 (*fp)

11.2.3 函数指针作为参数 /* 用梯形公式计算一个函数的积分 */ double calc(double (*fp)(double), double a, double b) { double z; z = (b-a)/2 * (fp(a)+fp(b)); return z; }

11.2.3 函数指针作为参数 double f1(double x) { return x*x; } double f2(double x) return sin(x)/x; void main() { double result; double (*fp)(double); fp = f1; result = calc(fp, 1,2); result = calc(f2, 1,2); }

* 指针数组与数组指针 char ccolor[][7] = {“red”, …}; ccolor是一个二维数组 它的每一行都是一个一维数组 ccolor + i 是一个指针, 指向第i行上的一维数组 ccolor+i类型“长度为7的一维数组”的指针 ccolor[i]也是一个指针,指向第i行的首元素 ccolor r e d \0 b l u y o w g n a c k