资源预览内容
第1页 / 共94页
第2页 / 共94页
第3页 / 共94页
第4页 / 共94页
第5页 / 共94页
第6页 / 共94页
第7页 / 共94页
第8页 / 共94页
第9页 / 共94页
第10页 / 共94页
亲,该文档总共94页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第 9章章 指指 针针制作人:王敬华制作人:王敬华第 9章:指 针 u学习的意义学习的意义 语言程序设计教程第二版 第九章 指针C指针是语言中广泛使用的一种数据类型。指针是语言中广泛使用的一种数据类型。 运用指针编运用指针编程是语言最主要的风格之一。程是语言最主要的风格之一。C程序设计中使用指针可以程序设计中使用指针可以 : 使程序简洁、紧凑、高效使程序简洁、紧凑、高效 有效地表示复杂的数据结构有效地表示复杂的数据结构 动态分配内存动态分配内存 得到多于一个的函数返回值得到多于一个的函数返回值 能象汇编语言一样处理内存地址,从而编出精练而高能象汇编语言一样处理内存地址,从而编出精练而高效的程序效的程序 学习指针是学习语言中最重要的一环,学习指针是学习语言中最重要的一环, 能否正确理解和能否正确理解和使用指针是我们是否掌握语言的一个标志,可以说使用指针是我们是否掌握语言的一个标志,可以说 不懂不懂 C语语言中的指针就不懂什么是言中的指针就不懂什么是 C语言语言 。 u学习目标学习目标 理解指针的概念理解指针的概念 掌握指针变量的定义与引用方法;掌握指针变量的定义与引用方法; 掌握指针与数组、字符串之间的联系;掌握指针与数组、字符串之间的联系; 掌握动态内存分配和释放的方法;掌握动态内存分配和释放的方法; 掌握带指针型参数和返回指针的函数的定义方法;掌握带指针型参数和返回指针的函数的定义方法; 掌握函数指针的用法;掌握函数指针的用法; 语言程序设计教程第二版 第九章 指针Cu学习内容学习内容 指针与指针变量的概念指针与指针变量的概念 指针变量的定义和引用指针变量的定义和引用 指针和地址运算指针和地址运算 指针与数组指针与数组l 数组的指针和指向数组的指针变量数组的指针和指向数组的指针变量l 指向多维数组的指针指向多维数组的指针 _数组指针数组指针l 元素为指针的数组元素为指针的数组 _指针数组指针数组 指针与字符串指针与字符串 指针与动态内存分配指针与动态内存分配 多级指针多级指针 指针与数组作为函数的参数指针与数组作为函数的参数 指针作为函数的返回值指针作为函数的返回值 _指针函数指针函数 指向函数的指针指向函数的指针 _函数指针函数指针 带参数的带参数的 main函数函数 本章小结本章小结 语言程序设计教程第二版 第九章 指针C.内存内存2000200120022005020032004. .9.1 指针与指针变量的概念 1、 内存地址内存地址 内存中存储单元的编号内存中存储单元的编号101 102201 202301 302401 402501 502601 602教学楼教学楼教室号码教室号码存储地址存储地址教室教室存储存储单元单元教室有容教室有容量量存储单元有存储单元有大小大小 (字节单字节单元、字单元元、字单元 )50存储存储数据数据注意:注意: 内存单元的地址与内存单元中的数据是内存单元的地址与内存单元中的数据是两个完全不同的概念。两个完全不同的概念。语言程序设计教程第二版 第九章 指针C内存内存.0200020012002200520032004.2、 变量地址 系统分配给变量的内存单元的起始地址程序中程序中 : int i; float k;内存中每个字节有一个编号内存中每个字节有一个编号 -地址地址ik编译或函数调用时为其分配内存单元编译或函数调用时为其分配内存单元变量变量 是对程序中数据是对程序中数据存储空间的抽象存储空间的抽象i的地的地址址k的的地址地址注意:注意: 在在 TC或或 BC下,系统将给变下,系统将给变量量 i分配分配 2字节字节 的单元,而的单元,而 VC下将是下将是4字节字节 的单元!的单元!语言程序设计教程第二版 第九章 指针C整型变量整型变量 i变量变量 i_pointer.1020002004200620052001200220033、指针与指针变量l指针: 一个变量的地址l指针变量: 专门存放变量地址的变量2000指针变量指针变量整型变量整型变量 i的内容的内容指针变量指针变量 i_pointer的内容的内容(是地址是地址 )变量的地址变量的地址指针指针指针变量指针变量变量变量变量地址变量地址 (指针指针 )变量值变量值指向指向 地址存入地址存入指针变量指针变量语言程序设计教程第二版 第九章 指针C4、 &与 *运算符l 含义含义含义 : 取变量的地址取变量的地址单目运算符单目运算符结合性结合性 :自右向左自右向左含义含义 : 取指针所指向变量的内容取指针所指向变量的内容单目运算符单目运算符结合性结合性 :自右向左自右向左l 两者关系:互为 逆运算l 理解2000 10i_pointer *i_pointer&i_pointerii_pointer &i &(*i_pointer)i *i_pointer *(&i)i_pointer = &i = &(*i_pointer)i = *i_pointer = *(&i).2000200420062005整型变量整型变量 i10变量变量 i_pointer2001200220032000 指针变量指针变量i_pointer-指针变量,它的内容是地址量指针变量,它的内容是地址量*i_pointer-指针的指针的 目标变量目标变量 ,它的内容是数据,它的内容是数据&i_pointer-指针变量占用内存的地址指针变量占用内存的地址语言程序设计教程第二版 第九章 指针Cl 直接访问:按变量名来存取变量值l 间接访问:通过存放变量地址的变量去访问变量例例 i = 3; -直接访问直接访问指针变量指针变量.2000200420062005整型变量整型变量 i10变量变量 i_pointer20012002200320003例例 *i_pointer = 20; -间接访问间接访问209.2 指针变量的定义和引用 1、 变量值的存取方法变量值的存取方法语言程序设计教程第二版 第九章 指针C指针变量指针变量.2000200420062005整型变量整型变量 i10变量变量 i_pointer2001200220032000整型变量整型变量 k10例例 k = i; k = *i_pointer; -直接访问直接访问-间接访问间接访问语言程序设计教程第二版 第九章 指针C2、指针变量与其所指向的变量之间的关系、指针变量与其所指向的变量之间的关系3变量变量 i2000i_pointer*i_pointeri *i_pointer&i i_pointeri=3; *i_pointer=3;3、指针变量的定义、指针变量的定义一般形式:一般形式: 存储类型存储类型 数据类型符数据类型符 *变量名;变量名;合法标识符合法标识符表示定义指针变量表示定义指针变量不是不是 * 运算符运算符指针的目标变量的数据类型指针的目标变量的数据类型指针变量本身的存储类型指针变量本身的存储类型注意:注意: int *p1, *p2; 与与 int *p1, p2; 指针变量名是指针变量名是 p1,p2 ,不是不是 *p1,*p2 指针变量只能指向定义时所规定类型的变量指针变量只能指向定义时所规定类型的变量 指针变量定义后,变量值不确定,应用前必须先赋值指针变量定义后,变量值不确定,应用前必须先赋值例例 int *p1, *p2;float *q;static char *name;语言程序设计教程第二版 第九章 指针C例例 int i;int *p = &i;例例 int *p = &i;int i;例例 void main ( ) int i;static int *p = &i;. ()标准标准 C下不能用下不能用 auto变量的变量的地址去初始化地址去初始化 static型指针(型指针(但在但在 C+程序中可以程序中可以 ) 4、指针变量的赋值、指针变量的赋值 初始化赋值初始化赋值存储类型存储类型 数据类型数据类型 *指针名指针名 = 初始地址值初始地址值 ;赋给指针变量,赋给指针变量,不是赋给目标变量不是赋给目标变量变量必须变量必须 已说明过已说明过类型类型 应一致应一致例例 int i;int *p = &i;int *q = p;用已初始化指针变量作初值用已初始化指针变量作初值语言程序设计教程第二版 第九章 指针C例例 int a;int *p;p = &a; 赋值语句赋值赋值语句赋值例例 int a = 20 ;int *p, *q;p = &a;q = p;整型变量整型变量 a指针变量指针变量 p指针变量指针变量 q.2000. 2020002000语言程序设计教程第二版 第九章 指针C例例 int *p = &a;int a;指针变量赋值的几种错误方法指针变量赋值的几种错误方法 : 变量变量 a的定义在后,对的定义在后,对 a的引的引用超出了用超出了 a的作用域的作用域例例 int a;int *pi = &a;char *pc = &a; pc不能指向非字符型变量不能指向非字符型变量 例例 int a;int *p;*p = &a; 赋值语句中,被赋值的指针赋值语句中,被赋值的指针变量变量 p的前面不能再加的前面不能再加 “*”说明符说明符 例例 int *p;p = 2000; 不允许直接把一个数赋值给不允许直接把一个数赋值给指针变量指针变量 例例 int a;static int *p = &a;不能用不能用 auto变量的地址去初变量的地址去初始化始化 static型指针型指针 注意:注意: 一个指针变量只能指向同类型的变量如果给指针赋一个指针变量只能指向同类型的变量如果给指针赋值时,值时, =号右边的指针类型与左边的指针类型不同,则需要号右边的指针类型与左边的指针类型不同,则需要进行类型强制转换。进行类型强制转换。 int a;int *pi;char *pc;pi = &a; /pi指向指向 apc = (char *)pi; /pc也指向了也指向了 a,即,即 pi和和 pc的值都是的值都是 a的地址的地址语言程序设计教程第二版 第九章 指针C5、零指针与空类型指针零指针: (空指针 )l 定义 : 指针变量值为零l 表示: int * p = 0; p指向地址为指向地址为 0的单元的单元 ,系统保证该单元不作它用系统保证该单元不作它用表示指针变量值表示指针变量值 没有意义没有意义#define NULL 0int *p = NULL:l p = NULL与未对 p赋值不同l 用途 : 避免指针变量的非法引用在程
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号