




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
指针的概念 指针变量 指针与数组 指针与函数 返回指针值的函数 前言 C程序设计中使用指针可以 使程序简洁 紧凑 高效有效地表示复杂的数据结构动态分配内存得到多于一个的函数返回值 指针的概念 变量与地址 程序中 inti floatk 内存中每个字节有一个编号 地址 i k 编译或函数调用时为其分配内存单元 变量是对程序中数据存储空间的抽象 指针 一个变量的地址指针变量 专门存放变量地址的变量叫 2000 指针 指针变量 变量的内容 变量的地址 指针与指针变量 与 运算符 含义 含义 取变量的地址单目运算符优先级 2结合性 自右向左 含义 取指针所指向变量的内容单目运算符优先级 2结合性 自右向左 两者关系 互为逆运算理解 i pointer 指针变量 它的内容是地址量 i pointer 指针的目标变量 它的内容是数据 i pointer 指针变量占用内存的地址 i pointer i i pointer i i pointer i i pointer i i pointer i i pointer i 直接访问与间接访问 直接访问 按变量地址存取变量值间接访问 通过存放变量地址的变量去访问变量 例i 3 直接访问 3 例 i pointer 20 间接访问 20 例k i 直接访问k i pointer 间接访问 10 例k i k i pointer 例子图解 2指针变量 指针变量与其所指向的变量之间的关系 指针变量的定义一般形式 存储类型 数据类型 指针名 合法标识符 指针变量本身的存储类型 指针的目标变量的数据类型 表示定义指针变量不是 运算符 例int p1 p2 float q staticchar name 注意 1 int p1 p2 与int p1 p2 2 指针变量名是p1 p2 不是 p1 p23 指针变量只能指向定义时所规定类型的变量4 指针变量定义后 变量值不确定 应用前必须先赋值 指针变量的初始化 一般形式 存储类型 数据类型 指针名 初始地址值 赋给指针变量 不是赋给目标变量 例inti int p 变量必须已说明过类型应一致 例inti int p 用已初始化指针变量作初值 例main inti staticint p 不能用auto变量的地址去初始化static型指针 例main inti 10 int p p i printf d p 危险 例main inti 10 k int p p 指针变量必须先赋值 再使用 零指针 空指针 定义 指针变量值为零表示 int p 0 p指向地址为0的单元 系统保证该单元不作它用表示指针变量值没有意义 defineNULL0int p NULL p NULL与未对p赋值不同用途 避免指针变量的非法引用在程序中常作为状态比较 例int p while p NULL void 类型指针表示 void p 使用时要进行强制类型转换 例char p1 void p2 p1 char p2 p2 void p1 表示不指定p是指向哪一种类型数据的指针变量 零指针与空类型指针 main int p1 p2 p a b scanf d d 运行结果 a 5 b 9max 9 min 5 5 2006 9 2008 2006 2008 2006 例输入两个数 并使其从大到小输出 指针变量作为函数参数 地址传递 特点 共享内存 双向 传递 swap intx inty inttemp temp x x y y temp main inta b scanf d d 例将数从大到小输出 5 9 5 5 9 COPY 特点 共享内存 双向 传递 swap intx inty inttemp temp x x y y temp main inta b scanf d d 例将数从大到小输出 值传递 5 9 运行结果 5 9 指针变量作为函数参数 地址传递 swap int p1 int p2 intp p p1 p1 p2 p2 p main inta b int pointer 1 pointer 2 scanf d d 5 9 2000 2002 5 9 COPY 5 例将数从大到小输出 swap int p1 int p2 intp p p1 p1 p2 p2 p main inta b int pointer 1 pointer 2 scanf d d 5 9 2000 2002 5 9 运行结果 9 5 地址传递 例将数从大到小输出 1 指向数组元素的指针变量 3指针与数组 例intarray 10 int p p 数组名是表示数组首地址的地址常量 指针变量的赋值运算p 指针变量p2值 p1 不能把一个整数 p 也不能把p的值 整型变量 如inti p p 1000 i p 指针变量与其指向的变量具有相同数据类型 指针的运算 p i p i d i为整型数 d为p指向的变量所占字节数 p p p i p i p i p i等若p1与p2指向同一数组 p1 p2 两指针间元素个数 p1 p2 dp1 p2无意义 例p指向float数 则p 1 p 1 4 例p指向int型数组 且p 则p 1指向a 1 例inta 10 int p 例inta 10 int p1 1 指针的算术运算 若p1和p2指向同一数组 则p1p2表示p1指的元素在后p1 p2表示p1与p2指向同一元素若p1与p2不指向同一数组 比较无意义p NULL或p NULL 指针变量的关系运算 变址运算符a i a i a i p i p i a i main inta 5 pa i for i 0 i 5 i a i i 1 pa a for i 0 i 5 i printf pa d d n i pa i for i 0 i 5 i printf a d d n i a i for i 0 i 5 i printf pa d d n i pa i for i 0 i 5 i printf a d d n i a i 例数组元素的引用方法 例inta 1 2 3 4 5 6 7 8 9 10 p a i 数组元素地址的正确表示 A a 1 B a C p D p i 数组名是地址常量p p a a a 1 a 2 例voidmain inta 5 8 7 6 2 7 3 inty p 输出 56 6 例注意指针变量的运算 main inti p a 7 p a for i 0 i 7 i scanf d p printf n for i 0 i 7 i p printf d p p a 指针变量可以指到数组后的内存单元 例注意指针的当前值 数组名作函数参数 是地址传递数组名作函数参数 实参与形参的对应关系 数组名作函数参数 实参与形参均用数组 voidinv intx intn intt i j m n 1 2 for i 0 i m i j n 1 i t x i x i x j x j t main inti a 10 3 7 9 11 0 6 7 5 4 2 inv a 10 printf Thearrayhasbeenreverted n for i 0 i 10 i printf d a i printf n m 4 例将数组a中的n个整数按相反顺序存放 1 voidinv int x intn intt p i j m n 1 2 i x j x n 1 p x m for i p i j t i i j j t main inti a 10 3 7 9 11 0 6 7 5 4 2 inv a 10 printf Thearrayhasbeenreverted n for i 0 i 10 i printf d a i printf n 实参用数组 形参用指针变量 例将数组a中的n个整数按相反顺序存放 2 voidinv int x intn intt i j p m n 1 2 i x j x n 1 p x m for i p i j t i i j j t main inti a 10 p a for i 0 i 10 i p scanf d p p a inv p 10 printf Thearrayhasbeenreverted n for p a p a 10 p printf d p 实参与形参均用指针变量 例将数组a中的n个整数按相反顺序存放 3 voidinv intx intn intt i j m n 1 2 for i 0 i m i j n 1 i t x i x i x j x j t main inti a 10 p a for i 0 i 10 i p scanf d p p a inv p 10 printf Thearrayhasbeenreverted n for p arr p arr 10 p printf d p 实参用指针变量 形参用数组 例将数组a中的n个整数按相反顺序存放 4 int p与intq 10 数组名是指针 地址 常量p q p i是q i 的地址数组元素的表示方法 下标法和指针法 即若p q 则p i q i p i q i 形参数组实质上是指针变量 即intq int q在定义指针变量 不是形参 时 不能把int p写成intp 系统只给p分配能保存一个指针值的内存区 一般2字节 而给q分配2 10字节的内存区 一级指针变量与一维数组的关系 4指针与字符串字符串表示形式用字符数组实现 例main charstring IloveChina printf s n string printf s n string 7 例main char string IloveChina printf s n string string 7 while string putchar string 0 首地址处的数据元素string 字符指针初始化 把字符串首地址赋给string char string string IloveChina string 0 用字符指针实现 字符串指针作函数参数 例用函数调用实现字符串复制 1 用字符数组作参数 2 用字符指针变量作参数 voidcopy string charfrom charto inti 0 while from i 0 to i from i i to i 0 main chara Iamateacher charb Youareastudent printf string a s nstring b s n a b copy string a b printf nstring a s nstring b s n a b voidcopy string char from char to for from 0 from to to from to 0 main char a Iamateacher char b Youareastudent printf string a s nstring b s n a b copy string a b printf nstring a s nstring b s n a b 字符指针变量与字符数组 char cp 与charstr 20 str由若干元素组成 每个元素放一个字符 而cp中存放字符串首地址charstr 20 str IloveChina char cp cp IloveChina str是地址常量 cp是地址变量cp接受键入字符串时 必须先开辟存储空间 例charstr 10 scanf s str 而char cp scanf s cp 改为 char cp str 10 cp str scanf s cp 字符串与数组关系 字符串用一维字符数组存放字符数组具有一维数组的所有特点数组名是指向数组首地址的地址常量数组元素的引用方法可用指针法和下标法数组名作函数参数是地址传递等区别存储格式 字符串结束标志赋值方式与初始化输入输出方式 s c charstr Hello charstr Hello charstr H e l l o char cp Hello inta 1 2 3 4 5 int p 1 2 3 4 5 charstr 10 cp inta 10 p str Hello cp Hello a 1 2 3 4 5 p 1 2 3 4 5 scanf s str printf s str gets str puts str 多级指针 定义 指向指针的指针一级指针 指针变量中存放目标变量的地址 例int p1 int p2 inti 3 p2 二级指针 指针变量中存放一级指针变量的地址 例int p inti 3 p 一级指针 单级间接寻址 二级指针 一级指针 目标变量 二级间接寻址 定义形式 存储类型 数据类型 指针名 如char p 例inti p p p是二级指针 不能用变量地址为其赋值 指针本身的存储类型 最终目标变量的数据类型 p是p间接指向对象的地址 p是p间接指向对象的值 例inti 3 int p1 int p2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新解读《GB-T 32608-2016羽毛球拍及部件的物理参数和试验方法》
- 停车库施工合同3篇
- 酒店宴会服务合同3篇
- 新解读《GB-T 30883-2014信息技术 数据集成中间件》
- 新解读《GB-T 31131-2014制造业信息化评估体系》
- 新解读《GB-T 31204-2014熔模铸造碳钢件》
- 聘用合同总经理聘用协议与聘用合同范本5篇
- 医院库房服务合同范本
- 小礼盒购销合同范本
- 废旧罐体出售合同范本
- 湖南文艺出版社小学四年级上册全册音乐教案及计划
- 社区书记文明城市创建表态发言范文(五篇)
- 检维修管理制度
- 服务业绿色低碳发展
- 风电基础劳务分包合同(2篇)
- 房屋建筑工程 危险性较大分部分项工程巡检记录表
- 4MWh储能系统技术方案
- 软件平台建设和运营合同
- 北京导游资格考试外语口试题四
- 高中数学必修一第一、二章综合测试卷(含解析)
- 1.3集合的基本运算(第1课时)课件高一上学期数学人教A版
评论
0/150
提交评论