培训演讲稿二.ppt
《培训演讲稿二.ppt》由会员分享,可在线阅读,更多相关《培训演讲稿二.ppt(35页珍藏版)》请在三一文库上搜索。
1、2019/7/30,主讲人:曹宣俊,C+面向对象程序设计,2019/7/30,目录,指针 常用字符串处理函数 函数 课后习题,2019/7/30,指针,指针是一种数据类型,具有指针类型的变量称为指针变量。一个指针变量所存储的信息是一个对象在内存中的地址。通过指针可以间接地访问对象。 每一个指针变量都有一个相应的基类型。基类型用以说明这个指针所指向的地址中存放数据的数据类型。,2019/7/30,指针,基类型* 指针变量 int *pi 指向int型的指针 float* pl;指向float型的指针 char* pc;指向char型的指针 char (*pa)3指向一维数组的指针 int (*p
2、f)();指向函数的指针 int *pp;指向指针的指针,2019/7/30,指针,一个指针所占的内存空间大小与一个内存地址所占空间相等 32位机器中指针占有四个字节 即int* pi 和double* pd都一样都占有四个字节,2019/7/30,指针的用法,错误用法一 int* p; *p=10; 为什么出错呢?这是因为指针也是一个变量,在执行int* p 语句时,只给p分配了空间,它是一个长度是4个字节的地址空间,并没有分配它指向的空间,也就是说,p的值是一个没有意义的地址值,显然*p也是没有意义的,当执行 *p=10; 语句时肯定出错,改正的方法是先分配平指向的空间,再赋值 int*
3、p=new int; *p=10,2019/7/30,指针的用法,错误用法二 上面的语句是否可以写成这样呢? int* p=10; 注意:p是一个指针变量,不能赋常量值。 但是以下语句是正确的: char* p=“string”; 这是因为计算机先给字符串“string”分配一个空间,并将其首地址赋值给p。但是要注意的是p指向的是单个字符,如以下语句 cout“*p”*pendl; 只输出s,要想输出整个字符串,应该为: cout“p=”pendl;,2019/7/30,指针的用法,前面列举了两种可能误用指针的例子 从前面的例子可以看出指针使用的繁琐, 但是为什么还要使用指针呢? 原因:1 指
4、针和数组相比,如果利用下标访问元素,指针比数组要处理起来快,2019/7/30,一维指针数组的指针表示法,Int a5;/a是一维数组名,它有五个int型变量。 当用指针表示时,*(a+i)与ai(其中,i=1,2,3,4,5)是相同的。常量指针与变量指针是有区别的。例如: int a10,*p; p=a; 表达式p+1,a+2,p=p+1,p-a等都是合法的;而表达式a=a+1,a=a-1等是非法的。为什么?,2019/7/30,二维指针数组的指针表示法,例如: int b23;/b是二维数组名,它有个int型变量 当用指针表示时,*(*(b+i)+j)与bij (其中i=0,1;j=0,1
5、,2)是相同的。一个二维数组可以看成是一个一维数组,即行数组,每个元素(即每个行数组)又是具有3个元素的一维数组,称为列数组。因此,b23可以看成2个元素的一维行数组和3个元素的一维 数组,称为列数组。因此,b23可以看成为2个元素的一维行数组和3个元素的一维列数组组成。前面讲过了一维数组的指针表示,将二维数组的行,列的一维数组都用指针表示,便得到如下形式: *(*(b+i)+j),2019/7/30,二维指针数组的指针表示法,数据的一种重要表现形式,常量的值不可改变, 这是个二级指针。再将二维数组的行数组用下标表示,列数组用指针表示,得到如下形式: *(bi+j) 再将二维数组的行数组用指针
6、表示,列数组用下标表示,又得到如下形式: (*(b+i)j 另外按照二维数组在内存中的排放顺序,用指向数组首元素的一级指针表示如下: *(&b00+3*i+j),2019/7/30,常用字符串处理函数,char* strstr(const char* srcstr,const char* substr); 应用举例: char* substr=“sip:”; char* srcstr=“http:sip:80810.164.204.148:26780;lr.sip:”; char* startstr=strstr(srcstr,substr); char* endstr=strstr(srcs
7、tr.”); int len=endstr-startstr-4; char servicekey8=0; memcpy(servicekey,startstr+4,len) coutservicekeyendl;,2019/7/30,常用字符串处理函数,char* strtok(char*,const char*); char t_sep=“|“; char *ptoken = NULL; char countrycode=“86|89|973“; ptoken = strtok(countrycode , t_sep); bool t_bExist = false; while ( pto
8、ken != NULL ) if ( strcmp(ptoken,“973“) = 0 )/对比国家码 t_bExist = true ; break; ptoken = strtok( NULL, t_sep); / if(t_bExist) cout“存在“endl; else cout“不存在“endl; ,2019/7/30,变量作用域,在C+中,所定义的变量分为局部变量和全部变量 局部变量 局部变量是指作用域在函数级和块级的变量。包含有自动变量(auto)和内部静态变量(static) 以及函数参数 自动变量是定义在函数体内或分程序内,定义时可以加说明符auto,也可以省略,所以,在
9、程序中无特殊说明的变量都默认为自动变量。由于自动变量以堆栈方式占用内存空间,因此在运行到此作用域时,系统会立刻为这个变量分配内存空间,而程序运行后,这个堆栈立即被系统回收,即这个变量会消失。 与自动变量作用域相同的另一种变量是寄存器,这种变量也是定义在函数体内或者分程序内,定义时前面加register。寄存器类变量有可能被存放在CPU的通用内存中,这样可提高存取速度,如果没被存放在通用内存,便会按照自动变量处理。能否存放在通用寄存器中,取决于通用寄存器是否空闲。 定义寄存器变量时,应注意一下几点: (1)该变量的数据长度与通用寄存器的长度相当,一般是char或者int (2)寄存器变量不宜太多
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 培训 演讲
链接地址:https://www.31doc.com/p-3201984.html