C程序设计课件第七章.ppt
文本预览下载声明
第七章 指针 基本概念 指针运算 指针与数组 指针与字符串 指向指针的指针 命令行参数 本章小结 基本概念 指针是高级程序设计语言中一个重要的概念 正确灵活运用指针 可有效地表示和使用复杂的数据结构 可动态分配内存空间,节省程序运行空间,提高运行效率 不正确理解和使用指针,指针将是程序中最危险的成分,由此带来的后果可能是无法估量的。 数据在内存中的存储和访问方式 每个变量 在计算机内存占用一块存储区 该存储区的地址就是相应变量的地址 变量可能有值 该存储区保存的内容就是相应变量的值 例如有变量声明 char c=S; int v=27,u=32; int *p = v; 则编译程序分别给变量 c 、v 、u 、p 分配存储空间如图所示 必须理解清楚: 给变量分配的内存区域 该内存区域的地址 该内存区域保存的内容 以及它们之间的关系 一个变量v的指针或称指向变量v的指针 就是给它分配的内存区域的地址 或说是给它分配的内存区域的地址首地址 访问变量 直接访问:直接使用变量v的名字 int v=10; v=v*10; 间接访问:使用指向相应变量的指针 比如访问变量 v 可以用下面方式来实现: *p 算式 (*p)*10 同样得到值100 。它通过指向 v 的 指针变量 p ,采用间接访问的方式实现对变量 v 的访问,取出变量 v 的值参与运算。 指针类型 指针类型和基类型 在C中,任何一个类型都伴随着一个指向本类型变量的指针类型 表现形式 设有类型T,则指向T类型变量的指针类型用: T * 表示,T称为该指针类型的基类型。 指针变量 意义 指针变量简称指针 是一种特殊的变量 它里面存储的“值”被解释成为一个变量的地址,确切的说是计算机内存的一个地址。 声明指针变量 说明指向T类型变量的指针变量使用形式: T *p , *p , … *p ; 其中,每个p都是标识符,是被说明的指针类型的变量,确切的说是“指向T类型变量的指针变量”。 指针所指向的类型可以是 基本数据类型 构造型数据类型 指针类型 函数 经常简称 “指向T类型变量的指针变量v” “v指向T类型” “T类型的指针v” 例如 int *iptr1, *iptr2 ; /* 说明指向int类型变量的指针变量 iptr1和iptr2 */ char * cptr ; // 说明指向char类型变量的指针变cptr int x , y ; char ch = a’; 指针变量的值是内存地址(宏观上讲是变量的地址) 求取不同类型变量或常量地址的表达方式不同: 基本类型变量、数组成员、结构体变量、联合体变量等,用求地址运算符“”获取变量的地址; 数组的地址与其第一个元素(成员)的地址相同,用数组名字本身表示; 函数的地址为函数的入口地址,用函数名字表示 指针与数组的关系 数组名(数组变量)本身就是一个指针,可以认为它是一个常量指针 可以定义指向数组的指针和指针数组等等 例子 int w[5]; int *pw=w ; // pw表示数组w 或者说指向变量w[0] int *q=w[2]; // q指向变量w[2] int rr[10][5],(*pr)[5]; // pr是指向一维数组的指针, // 该一维数组有5个元素,每 // 个元素是一个整数 pr=rr; // pr指向一维数组rr[0], //该rr[0]有5个元素 int *qr[5]; // qr是指针数组,有5个元素, // 每个元素是一个指向int类变量的指针 int *(tr[5]); //同qr 。tr是指针数组,有5个元素, //每个元素是一个指向int类变量的指针 qr[1]=y; // qr[1]指向变量 y 指针所指变量 指针变量和指针所指变量是两个不同的概念 指针变量即指针,它本身存储某个内存地址(某个变量的地址)。 指针所指变量为指针变量中所保存的内存地址对应的变量。 例7-1 指针变量与指针所指变量 该程序运行过程为: 程序第7行输出提示信息 在键盘输入23 程序第9行输出提示信息 在键盘输入45 程序第11行输出提示信息 在键盘输入r 程序第16行输出 程序第17行输出 void
显示全部