文档详情

清华大学出版社向华主编《C语言程序设计》课件第八章.ppt

发布:2017-12-02约9.74千字共33页下载文档
文本预览下载声明
《C语言程序设计》 第8章 指针 ?指针的概念 ?指针变量的定义、初始化及 指针的运算 ?指针与数组、指针与函数、 指针与字符串 ?指向指针的指针 本章内容要点 本章任务 排序是程序设计中经常遇到的问题。本章的任务是通过指针实现对数据的排序。通过几个示例,体现出指针的灵活和高效性,让读者更好的领会和掌握指针的相关知识。 8.1 指针的概念 8.1 指针的概念 8.1 指针的概念 8.1 指针的概念 8.1 指针的概念 8.1 指针的概念 解决本章任务一 8.2 指针运算 8.2 指针运算 8.3 指针与数组 8.3 指针与数组 8.3 指针与数组 8.3 指针与数组 8.4 指针与字符串 8.4 指针与字符串 8.4 指针与字符串 8.5 指针与函数 8.5 指针与函数 8.5 指针与函数 8.5 指针与函数 8.5 指针与函数 解决本章任务二 8.6 指向指针的指针 8.6 指向指针的指针 8.6 指向指针的指针 解决本章任务三 习题 习题 习题 1. 填空题 (1)若有定义int i; 则使指针p指向变量i的定义语句是_________________,使指针p指向变量i的赋值语句是_____________________________。 (2)下面程序段的运行结果是_____________。 char s[80], *sp = HELLO!; sp = strcpy(s, sp); s[0] = h; puts(sp); (3)下面程序段的运行结果是_____________。 char str[] = abc\0def\0ghi, *p = str; printf(%s, p + 5); (4)若有定义:int a[]={2, 4, 6, 8, 10, 12}; *p=a; 则*(p+1)的值是________,*(a+5)的值是__________。 清华大学出版社 第8章 指针 清华大学出版社 任务分解: 3个整数的排序并输出。 用指针数组实现对10个不等长字符串的排序并输出。 用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n和整数在主函数中输入,最后在主函数中输出。 8.1.1 指针和指针变量 在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,内存中每一个字节都有一个确定其位置的地址,而每个变量在编译时都在内存分配连续的一定字节数的存储单元,不同的数据类型所占用的内存单元数不等,如字符型变量分配1个字节,整型变量分配两个连续字节,单精度实型变量分配4个连续字节,双精度实型变量分配8个连续字节。变量分配的存储单元的第一字节的地址就是该变量的地址。 编译程序在对源程序进行编译时,每遇到一个变量,就为它分配存储单元,同时记录变量的名称、变量的数据类型和变量的地址。 8.1.1 指针和指针变量 例如有下面的变量定义: char c; int i = 3; float f; 假设我们为变量分配的内存如图8.1所示,则记录下来的变量与地址的对照情况如下表所示。 图8.1 为变量分配的内存 表8.1 变量与地址对照表 4001 float f 3001 int i 2001 char c 地 址 数据类型 变 量 名 8.1.2 指针变量的定义 其中,“*”表示这是一个指针变量,变量名即为定义的指针变量名,类型声明符表示该指针变量所指向的变量的数据类型。例如: int *p1, *p2; /* 定义两个指针变量p1、p2,指向的数据类型为整型 */ float *f; /* 定义指针变量f,指向的数据类型为浮点型 */ char *pc; /* 定义指针变量pc,指向的数据类型为字符型 */ 说明: (1)C语言规定所有变量必须先定义后使用,指针变量也不例外,为了表示指针变量是存放地址的特殊变量,定义变量时在变量名前加指向符号“*”。 (2)定义指针变量时,不仅要定义指针变量名,还必须指出指针变量所指向的变量的类型,或者说,一个指针变量只能指向同一数据类型的变量。 指针变量的定义形式: 类型声明符 *变量名; 8.1.3 指针变量的操作 指针变量同普通变量一样,在使用之前不仅要进行声明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址,决不能赋予任何其他数据,否则将引起错误。在C语言中,变量的地址是由编译系统分配的。 指针变量的操作主要有以下两个相关的运算符: 其中,地址运算符“”用来表示变量的
显示全部
相似文档