- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十二讲 指针 第十二讲 指针 指针的概念 指针变量的定义和初始化 指针运算符 指针作为函数参数 指针与数组 指针与字符串 程序设计举例 简介 指针 功能强大,不易掌握。 用来模拟引用传递。 与数组和字符串关系密切。 可以创建和操作动态的数据结构: 链表 队列 栈 树 指针的概念 内存单元地址称为指针。 对内存单元的访问有直接和间接访问两种方式。 C语言允许直接通过地址来处理数据。 内存对象的地址 变量的地址 用取地址运算符()获得变量在内存中的地址。 数组的地址 即第一个元素的地址,用数组名表示。 函数的地址 用函数名表示。 指针变量 指针变量就是保存内存地址的变量。 指针变量 指针变量的声明 类型说明符 * 指针变量名; * 表示 x_pointer 是一个指针变量 x_pointer 是 int* 类型的指针,读作: 指向 int 型数据的指针 指向整型对象的指针 指针可以声明为指向任何数据类型的对象 声明多个指针时,每个变量前都必须有 * 指针变量 指针变量的初始化 在声明语句中为指针变量指定初值。 指针变量可以被初始化为 0 ,NULL 或 一个地址量。 0 和 NULL 是等价的(用NULL更好) NULL 是在stdio.h(和几个其他头文件)中定义的符号常量 取地址运算符 取地址运算符: 返回变量在内存中的地址。只能用于一个具体的变量或数组元素而不能是表达式或常量。 指针运算符 指针运算符:* 能间接地存取指针所指向的变量的值。 案例分析:指针运算符 指针运算符 指针作为函数的参数 指针作为函数的参数用来模拟引用传递。 用指针变量作为函数的形式参数。 调用函数时,用 运算符把实际参数的地址传递给函数。 在被调用函数中,用 * 运算符间接引用实际参数。 案例分析:指针参数 问题:交换两个变量的值。哪一种实现是正确的? 案例分析:指针参数 使用指针交换两个元素的值 12-2.c 案例分析:指针参数 使用指针交换两个元素的值 12-1.c 案例分析:指针参数 分析下列程序的输出结果。 12-3.c 指针与数组 一个变量有一个地址,一个数组包含若干个元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。 数组和指针关系密切。 数组名是一个指针常量。 数组指针:指向数组的指针(指向数组的起始地址),数组元素的指针是数组元素的地址。 数组指针可以用来完成任何涉及数组下标的操作。 将 bPtr 的值置为数组 b 中的第一个元素的地址 bPtr = b; 等价于 bPtr = b[0]; 指针运算 指针可以参与以下运算: 赋值运算 给指针变量赋值 关系运算 两个指针之间的比较 算术运算 加(减)一个整数 两个指针相减 指针运算 指针的赋值运算 可以把指针赋给同类型的指针变量。 指针运算 指针的赋值运算 把数组的首地址赋予指向数组的指针变量。 int a[5],*pa; pa=a; /* 数组名表示数组的首地址,故可以赋予指向数组的指针变量pa */ 也可写为: pa=a[0]; 也可采取初始化赋值的方法: int a[5], *pa=a; 指针运算 指针的赋值运算 把字符串的首地址赋予指向字符类型的指针变量。 char *pc; pc=“C Language”; 或: char *pc=“C Language”; 说明: 并不是将整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量。(在后面的章节有详细介绍) 指针运算 指针的算术运算 自增自减(++,--) 加上一个整数(+,+=,-,-=) 两个指针相减 指针的算术运算在数组上使用才有意义。 指针运算 指针变量加(减)一个整数 int m[12],*p1=m[6],*p2=m[8],*p3; p1=p1-3; p2--; p3=p2+2; 指针运算 移动指针变量访问数组元素。12-5.c 指针运算 两个指针变量相减 指针相减操作,一般只有高地址指针减低地址指针才有意义。 指针运算 指针的关系运算 比较两个指针的值。 指针运算 比较指针变量,逆序输出数组元素。12-4.c 指向数组的指针 一维数组的指针 由于在内存中数组中的所有元素都是连续排列的,所以通过数组的首地址加上偏移量就可得到其他元素的地址。 引用数组元素的表达式 数组元素 b[3] 可以用 *(bPtr + 3) 来引用 3是偏移量 这种表示法称为指针偏移量表示法 还可以用 bPtr[3] 来引用 称为指针下标表示法 与 b[3] 相同 还可以用 *(b + 3) 来引用 指针与数组 一维数组的指针 引用数组元素的表达式 12-6-1/2/3.c 指针与数组 数组和指针互换使用时的注意事项 数组名是一个
文档评论(0)