




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计(C+)(00864094),第7讲 指针与引用 20112012学年秋季学期 (CPP111),指针与引用,指针概念 指针的基本使用 指针与数组 指针与函数 指针应用 动态内存 特殊指针 引用,指针指针概念,内存要点,程序运行中所有的代码和数据都是放在内存中,它们共享同一个内存空间。 内存以字节为基本单位,整个内存就是由很多排列整齐的字节组成。 内存中的每个字节都有一个惟一的编码,称为地址。 地址是连续编码的,最小从0地址开始。 每个字节包含8位二进制。,变量要点,变量4要素 名称、类型、数值、地址 程序通过变量操纵数据 每个变量都有一个生命期 对一般动态局部变量来说,变量的生命期从
2、变量所在的函数开始运行直到函数结束(返回),对全局变量和静态变量来说,变量的生命期从程序开始运行直到程序结束。 变量在生命期开始时分配地址,在生命期结束时回收地址。 在变量的生命期内,变量的地址不会变化,指针概念,指针,相当于地址 int n, *p; p=) 指针指向变量,pn 指针变量的类型,p类型为int * 指针所指变量的类型,*p类型为int 空指针(地址为0的指针),记为NULL,指针指针的基本使用,指针基本使用,指针变量的定义,变量名前带* 取址运算符,,指针使用举例,int n, m; int *p;,cin n; p = ,m=n;,指针指针与数组,一维数组的内存安排,int
3、 a =10,11,12,13,14; int *p; p=,变量访问的等价性,n=a2; a2+=n;,n=*(p+2); *(p+2)+=n;,n12 a224,数组名作为指针常量,指针作为数组名,数组名a代表整个数组,值为整个数组的首地址 数组名作为指针常量 a指向a0,a+2指向a2,*a即a0,*(a+2)即a2 反过来,指针作为数组名使用:*与等价,数组与指针的共同点,通过基地址偏移量方式访问元素 数组方式:数组名下标 指针方式:首地址偏移 数组名作为指针常量,int a10; 表示整个数组指向第1个元素 元素: ai 等同于 *(a+i) 首地址: 指向数组的第一个元素指向整个数
4、组 元素: *(p+i) 等同于 pi 首地址:p+i 等同于 或 +p; 相当于 p = p + 1; p-; 或 -p; 相当于 p = p 1; (*p)+; 或 +(*p); 相当于*p = *p + 1; (*p)-; 或 -(*p); 相当于 *p = *p 1;,指针的比较和相减运算,int a5, *p = 则 q p 成立 q p 的结果为2,指针指针与函数,指针的交换,交换指针 int *p, *q, *t; t = p; p = q; q = t;,交换指针所指数据 int *p, *q, t; t = *p; *p = *q; *q = t;,编写函数,交换两数,#in
5、clude void swap( int *p, int *q ) int t; t = *p; *p = *q; *q = t; ,int main() int x, y; cin x y; swap( ,调用swap函数的内存结构图,指针指针应用,find函数:查找并返回下标下标法,int find( int a, int n, int x ) int i; for ( i=0; in; i+ ) if ( ai = x ) return i; return -1; ,pfind函数:查找并返回指针下标法,int *pfind( int a, int n, int x ) int i; f
6、or ( i=0; in; i+ ) if ( ai = x ) return ,pfind函数:查找并返回指针指针法,int *pfind( int a, int n, int x ) int *p; for ( p=a; pa+n; p+ ) if ( *p = x ) return p; return NULL; ,指针动态内存,动态内存分配与释放,#include 动态内存分配函数 void *malloc(unsigned size); 内存释放函数 void free(void* buffer); 分配与释放n个整数的空间 int *p; p = (int *) malloc( n
7、*sizeof(int) );/*分配*/ /*使用该分配空间*/ free(p);/*释放*/,输入n和n个整数,main() int *a, n, i; cin n; a = (int *)malloc(n*sizeof(int); for ( i=0; i ai; /* 指针a可作为数组名使用 */ free( a ); ,指针特殊指针,指针数组(概念),多个指针组成的数组,如char *pa10; 或如图初始化,二级指针(概念),char *p2; p2=pa; 或 p2= 第i个姓名:namesi 或 pai 或 p2i 或 *(p2+i) 第i个姓名的第j个字符 namesij 或
8、 paij 或 p2ij 或 *(pai+j) 或 *(*(p2+i)+j),函数指针(概念),指向函数的指针 返回类型 (*指针变量名)(函数形参表); 如:double (*pfunc) (double ); 函数指针指向函数 有库函数:double sin( double ); 如:pfunc=sin; 通过指针调用函数 如:y = (*pfunc) ( x ); 等价于 y=sin(x); 函数指针数组 如:double (*pfs3)(double);,命令行参数(概念),main( int argc, char *argv ) 或 main( int argc, char *argv ) 如程序命令:07ARG computer language,引用(C+) 比指针更简单,指针使用方法的简化引用,指针法 int n; int *p; p= p为指针,指向n *p与n等价,引用法 int n; int m为引用,n的代称 m与n等价,编写函数(引用),交换两数,#include void swap2( int ,int main() int x, y; cin x y; swap2( x, y ); cout x , y; return 0; ,C字符串,字符串定义与输入输出,C字符串以空字符0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冠名收据管理办法
- 决策指标管理办法
- 出国证照管理办法
- 出租商铺管理办法
- 分包计量管理办法
- 分工运维管理办法
- 分纤箱管理办法
- 列车消防管理办法
- 创新券管理办法
- 初中安全管理办法
- 2025至2030年中国量子级联激光器(QCL)行业市场专项调研及投资前景研究报告
- 2025至2030年中国连接器制造行业市场现状调查及投资方向研究报告
- 2025至2030中国市政公用工程行业项目调研及市场前景预测评估报告
- 地勤面试笔试题目及答案
- 浙江保安员考试题库及答案大全
- T/CSRA 23-2023塑料快速多因素耦合法第1部分:老化活化能的测定
- 羽毛球场馆项目可行性报告
- 《新药审批流程解析》课件
- 2025年小学语文毕业升学考试全真模拟卷(语文综合素养拓展)古诗文背诵与运用
- 诊断与评估课件 第三章 特殊儿童的评估取向与范围学习资料
- 淘宝模特合同协议模板
评论
0/150
提交评论