




已阅读5页,还剩80页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
设一个函数process,在调用它的时候, 每次实现不同的功能。输入a和b两个数, 第一次调用的时找出其中的大者,第二次 调用的时找出其中的小者。第三次调用求 两者之和。 第六章 指 针 指针是C语言的一个重要概念,也是C语言的一个重 要特色。深刻理解和正确使用指针是学习本章的基本 要求。 C程序设计中使用指针可以: 使程序简洁、紧凑、高效 有效地表示复杂的数据结构 动态分配内存 得到多个函数返回值 数据存储区 6.1 指针概述 6.1.1 地址与指针 (一)地址与取地址运算 1.地址 3 4.5 8.6 4 121 120 a b c d e f 1010 1012 1014 1018 1022 1023 int a=3,b=4; float c=4.5,d=8.6; char e=x,f=y; 编译或函数调用时 为其分配内存单元 内存中每个字节有 一个编号-地址 数据占有的 字节数由它 的类型决定 变量是对程序中数 据存储空间的抽象 2.取地址运算 对普通变量:通过取地址运算符“ i=3; 这种访问方式只需要变量本身就得到了该变量的全部 信息,不需要其它内容,是直接的。 数据存储区 3 4.5 8.6 4 121 120 a b c d e f 1010 1012 1014 1018 1022 1023 2. 间接访问 2000 2002 2004 2006 2008 2010 pa pb pc pd pe pf 1010 1012 1014 1018 1022 1023 指针变量 通过指针实现对变量的访问方式,称为间接访问。 间接对变量的访问方式: 首先要定义一个指针变量; 然后将一个同类型变量的地址赋给该指针变量(这时我 们称指针变量指向该变量); int *i_point,i=3; i_point= i=3i_point 变量的指针变量的地址 存放变量地址的变量指针变量 指针变量是一个特殊的变量,只能存放变量的地址 而不能用来存放其它类型的数据。 指针指向的变量 称为目标变量。 6.1.2 指针的类型与指针的定义 指针是有类型的,它的类型就是它所指向的实体的类型。 定义一个指针变量 格式:存储类型 类型标识符 *指针变量名; 例:int *a,*b; char *c, *ch; float *p1, *p2, *p; 指针变量定义后, 值不确定。 注意: *p 与 p 的区别,p才是指针变量; 指针变量只能指向定义时所规定类型的变量; 指针变量定义后,值不确定,应用前必须先赋值; 指针变量的赋值和初始化 赋值语句: int i=3,*p; p 不定 i 3 p = i的地址3 int *p; float a; p= int *p= int i; int i; int *p= int *q=p; int i; static int *p= int i=3,*p= 初始化: 一般形式:存储类型 数据类型 *指针名=初始地址值; 2000 2010 i的地址 指针变量 的地址i_point i=10 6.1.3 指针变量的引用 有关指针的运算符 取变量地址运算符。 i_point=2000 i_point -指针变量,它的内容是地址量 *i_point -指针的目标变量,它的内容是变量值 i *i_point int *p; *p=i; printf(“%d“,*p); 指针变量必 须先赋值, 再使用 main( ) int i=10,k; int *p= *p=i; printf(“%d“,*p); 危险 ! 指针变量可进行的操作 int a,b,*p1,*p2,*p3; 输出: printf(“%x,%x“,p1,p2); printf(“%d,%d“,*p1,*p2); 增减: p+; p-; p+=4; (只能和整数运算) *p+; *p-; 两指针加减: p1-p2; p1+p2; 两指针比较: if(p1p2) if(p1p2, p1*pt1) *pt1=dati; if(dati copy.exe source.c temp.c 有3个字符串参数的命令行 带参数的main函数形式: 命令行中参数个数 指针数组,保存命令行 参数中各字符串首地址 命令行参数的说明 形参也可以用其它名字,习惯上为 argc 和 argv argc 和 argv 的值得获得: 系统调用main函数时自动传递。 如有参程序myprog.c, myprog.exe 执行 C:myprog argument1 argument2 编译和链接 argc的值为3 argv2 argv1 argv0 main( int argc, char *argv ) int i; for(i=1; i test Computer and C Language 则:arg1: Computer arg2: and arg3: C arg4: Language argv1 argv2 argv3 argv4 Computer and C Language argv argv0test main(int argc, char *argv ) 带参main函数的定义还可以写成: main(int argc, char *argv) main(int argc, char argv ) 6.3.6 指针数据小结 6.4.1 常用指针类型变量归纳 定义义形式含 义义 int *pp为为指向整型数据的指针变针变 量 int(*p)np为为指向含n个元素的一维维整型数组组的指针变针变 量 int (*p)( )p为为指向函数的指针变针变 量,该该函数返回整型数 int *pnn个指向整型数据的指针变针变 量组组成的指针针数组组 int *p( )p为为返回指针针的函数,该该指针针指向一个整型数据 int *pp为为指针变针变 量,它指向一个指向整型数据的指针变针变 量 一级指针变量与一维数组的关系: 数组名是指针(地址)常量; int *p; 与 int a10; 系统只给p分配能保存一个指针值的内存区(一般2字节 );而给a分配2*10字节的内存区; 若p=a; p+i 是 ai的地址; 数组元素的表示方法:下标法和指针法: 若p=a,则pi ai *(a+i) *(p+i); 形参数组实质上是指针变量,即int p int *p; 二维数组与一维数组指针变量的关系: int a510 与 int (*p)10; 二维数组名是指向有n个元素的一维数组的指针常量; aij(ai)j(*(a+i)j(*p)j 二维数组形参实际上是一维数组指针变量, 即int x 10 int (*x)10; 系统只给p分配能保存一个指针值的内存区(一般2 字节);而给a分配2*5*10字节的内存区。 变量定义(不是形参)时两者不等价: p=a+i; 使p指向二维数组的第i行,p+,指向下一行; 二级指针与指针数组的关系: int *p; 与 int *a10; 指针数组名是二级指针常量; 若p=a; p+i 是ai的地址; 系统只给p分配能保存一个指针值的内存区;而给a 分配10块(每块一般是2字节)内存区,每块可保存一 个指针值。 指针数组作形参,int *p 与int *p完全等价,但作为 变量定义两者不同: 6.4.2 指针的运算 (一)指针与整数相加(减) 移动指针的位置,以其指针类型长度为单位。 p p p p p p int型数据float型数据 (二)指针的关系运算与相减运算 两个指针变量比较: 比较的结果是两个元素在数组中的前后位置,若两个 指针相等表示指向的是同一个元素。 此类运算必须是两个指针变量指向同一个数组的元素 两个指针变量相减: 两个指针变量的结果是两个指针之间的元素个数。 (三)指针赋值 只能将对应类型的变量地址赋值给指针 float f1,f2,*pf; pf= pf= 同类型指针间可以相互赋值 int a,b,*pa= pa=pb; 指针增1、减1 注意“+“和“-“运算与“*“运算优先级相同,它们在同 一个表达式中时,应按照结合性决定运算顺序。 例:int x =2,3,7,9; *px=x; *(px+1)=5; y = * +px;y = + *px; 53 6.4.3 指向void类型的指针 void 指针类型为“空类型”,它可定义一个指针变量,但 不指定它是指向
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 睡眠质量提升与养生保健技巧考核试卷
- 灯具国际贸易风险与应对策略考核试卷
- 锌锰电池的电极材料在长期储存中的性能保持考核试卷
- 银发族养生保健特殊关注考核试卷
- 猫狗常见疾病防治指南
- 冬季小学生疾病预防指南
- 食源性疾病主动监测体系构建与应用
- Orchinol-生命科学试剂-MCE
- 超神数学-高考数学总复习拔高篇(二轮)专题19平面向量中的取值范围问题(含答案或解析)
- 2025年流媒体平台竞争格局下的内容创新实践与案例分析
- “安全生产课件:如何预防工伤事故”
- 《教育学原理》马工程教材第二章教育与社会发展
- 西藏农村公路管理办法
- 野外生存优秀课件
- 国际投资学教程(第四版)綦建红答案
- 福建省福州市福建师大附中2023年自主招生样卷--数学试卷
- GB/T 16622-2022压配式实心轮胎规格、尺寸与负荷
- GB/T 3620.1-2016钛及钛合金牌号和化学成分
- GB/T 2878.2-2011液压传动连接带米制螺纹和O形圈密封的油口和螺柱端第2部分:重型螺柱端(S系列)
- GB/T 23858-2009检查井盖
- GB/T 23764-2009光催化自清洁材料性能测试方法
评论
0/150
提交评论