c++教程第07章.ppt_第1页
c++教程第07章.ppt_第2页
c++教程第07章.ppt_第3页
c++教程第07章.ppt_第4页
c++教程第07章.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章 指针,指针的概念,指针:具有确定属性的地址 属性决定了以该地址为起始地址的存储空间(数据单元)大小以及可以存放什么类型的数据 指针变量:可以存放指针的变量,指针的定义,指针变量声明 int *myPtr; 说明了一个指向int类型的指针变量myPtr int *myPtr1,i,*myPtr2, j; 可以说明指向任何数据类型的指针 指针变量声明时可以初始化为 0,NULL或某个地址(指针) 0 或 NULL: 不指向任何数据单元 (推荐使用NULL),指针的运算(1), 使 yPtr 指向 y,500000,600000,y 的地址是 yptr的值,600000,5,* (一元运算,

2、间接引用运算符,其操作数表达式的值必须是指针),如 int *yPtr,y; yptr = ,指针的运算(2),* 和 ,指针的运算(3),指针的运算( /* n is an integer */ int *nPtr; /* nPtr is a pointer to an integer */ n = 7; nPtr = ,指针的算术运算 指针变量可以自增/自减 (+ 或 -) 指针可以加/减一个整数( + 或 += ,- 或 -=) 同类型指针可以相减 一元运算符sizeof( ) 操作数为变量名、类型名或常量 运算结果为操作数所需存储单元的字节数 特例:当操作数为数组名时,运算结果为该数组

3、所需存储单元的总字节数 如 sizeof(int)、 sizeof(int *)均为4, 在声明 int myArray10,*p=myArray;后 sizeof(myArray)为40、 sizeof(p)为4,指针的运算(4),5 个元素的 int 数组v int v5, * vPtr = v ; / vPtr 为3000 vPtr += 2; / 赋值后 vPtr 为3008 把 vPtr的值当作整数和 n *sizeof(int)相加,得到 vPtr + n 的实际值,其它情况同理,指针变量 vPtr,3000,3004,3008,3012,3016,地址:,指针的运算(5),同类型

4、指针相减 int v5, * vPtr , * vPtr2; vPtr = / vPtr2 - vPtr 结果为 2. 把 vPtr2和vPtr的值当作整数相减后除以 sizeof(int),指针的运算(6),指针的关系运算 同类型指针可以进行各种关系运算 可以判断指针是否为 0或NULL 如 int v5, * vPtr , * vPtr2; vPtr = ,指针的运算(7),指针的赋值运算 同类型指针可以赋值(需满足“左值性质”) 不同类型的指针,赋值运算前必须对赋值运算符右边的指针表达式进行强制类型转换 (不是隐式) 如 int * nPtr; float f=0.5,* fPtr= v

5、oid *类型的指针不能被复引用,指针的运算(8),指针运算示例,#include int main() char c = A, * pc; int ints5= 1,2,3,4,5, *p1; int m = 6 , n = 7; int * p2, * p3; pc = ,指针运算示例,printf( np1= %p t *p1 = %d n, p1, *p1 ); p1 += 4; printf( After p1 += 4:t p1= %p t *p1 = %d n, p1, *p1 ); p2 = ,程序执行结果:,c= A pc = 0012FF7C *pc = A After p

6、c += 5: pc = 0012FF81 p1= 0012FF64 *p1 = 1 After p1 += 4: p1= 0012FF74 *p1 = 5 p2= 0012FF5C *p2 = 6 p3= 0012FF58 *p3 = 7 p2 - p3= 1 p2 = p3,指针和数组的关系,指针和数组联系密切 数组名是指向该数组第一个元素的常量指针 指针可以做数组下标运算 如: int b5, *bPtr; bPtr = b; /等价于bPtr = 注:C+编译器把形如指针表达式下标表达式的下标运算转化为表达式 *(指针表达式+下标表达式 )。特别要注意理解数组形参和多维数组下标运算的含

7、义,指针数组,数组元素可以是指针 如:int *array10,i; array5= 字符串的值:指向该串第一个字符的指针 suit 的每个元素是一个字符(char)指针 字符串中的字符并没有存放在数组中,数组中存放的是指向字符串的指针 suit 数组的元素数目是固定的,但字符串的长度可以不相等,指针数组suit的存储结构,suit3,suit2,suit1,suit0,使用 const 限定符(1),在声明变量或形式参数时使用,明确地说明哪些数据是不会改变的。声明变量时通常要给出初值,如 const int studNum = 100 ; 指向常量数据的非常量指针 int i, j, *q;

8、 const int * p; p = / 不允许,使用 const 限定符(2),指向非常量数据的常量指针 int var1,var2 ; int * const p = / 错误!,使用 const 限定符(3),指向常量数据的常量指针 const int val = 10; const int *const p = / 允许,使用 const 限定符(4),用于限定函数形式参数,以保护实参 void output(const double * pd) cout *pd ;/ 允许 *pd = 15.5 ; / 不允许! 或 void output(const double / 不允许!

9、,常用字符串处理函数(库文件string.h),函数原型: int strlen(const char *s); 函数原型: char* strcpy(char* dest, const char* src); 函数原型: char* strcat(char* dest, const char* src); 函数原型: int strcmp(const char* s1, const char* s2);,常用字符串处理函数(续),函数原型: char* strchr(const char* s, int c); 函数原型: char* strrchr(const char* s, int c

10、); 函数原型: char* strstr(const char* s1, const char* s2); 函数原型: char *strtok(char *s, char *delim);,字符串处理函数strtok的应用,#include #include main( ) char s=Hello C+ World; char *d= ; char *p; p = strtok(s, d); while(p) printf(%sn, p); p = strtok(NULL, d); return 0;,指针和引用,#include void swap(int *, int *); int

11、 main() int x = 10, y = 20; swap( ,用指针实现冒泡排序函数,void bubbleSort(int *array, int size) void swap( int *, int * ); int pass, j; for ( pass=0; passsize-1; pass+ ) for ( j = 0; j size-pass-1; j+ ) if ( arrayj arrayj+1 ) swap( ,两种分配内存的方式:静态和动态,静态内存分配 通过变量声明实现。所用内存空间(的大小)在编译时决定 动态内存分配 通过调用malloc函数或利用运算符new

12、实现。所用内存空间在程序运行时分配 和malloc函数对应的释放内存函数是free 和new对应的释放内存运算符是delete 有可能因为系统内存缺少导致动态内存分配失败,动态内存分配和释放方法1,函数malloc的原型是: void *malloc(unsigned size); 例如: int *p=(int *) malloc ( sizeof ( int ) ); (*p )+; int *score=(int *) malloc ( sizeof ( int ) * studNum ); if (score != NULL ) for ( int j = 0 ; j score j

13、; 函数free的原型是: void free(void *ptr); 如:free(p); free(score);,动态内存分配和释放方法2,使用new运算符分配内存,如 int *p= new int ; (*p )+; int * score= new int studNum ; for ( int j = 0 ; j score j ; 使用delete运算符释放内存,如 delete p ; delete score ;,对运行时指定数目的整数进行排序(1),#include #include void sortArray ( int , int ); void displayArray( int , int ); int main() int * a; int i, num; / 输入要排序的整数的数目 cout num; / 动态分配数组,以保存输入的整数 a = new int num ;,对运行时指定数目的整数进行排序(2),if (a = NULL) cout ai; / 调用函数sortA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论