主讲人:曹宣俊
C++面向对象程序设计
2017/7/4
目录
指针
常用字符串处理函数
函数
课后习题
2017/7/4
指针
指针是一种数据类型,具有指针类型的变量称为指针变量。一个指针变量所存储的信息是一个对象在内存中的地址。通过指针可以间接地访问对象。
每一个指针变量都有一个相应的基类型。基类型用以说明这个指针所指向的地址中存放数据的数据类型。
2017/7/4
指针
基类型* 指针变量
int *pi 指向int型的指针
float* pl;指向float型的指针
char* pc;指向char型的指针
char (*pa)[3]指向一维数组的指针
int (*pf)();指向函数的指针
int **pp;指向指针的指针
2017/7/4
指针
一个指针所占的内存空间大小与一个内存地址所占空间相等
32位机器中指针占有四个字节
即int* pi 和double* pd都一样都占有四个字节
2017/7/4
指针的用法
错误用法一
int* p;
*p=10;
为什么出错呢?这是因为指针也是一个变量,在执行int* p 语句时,只给p分配了空间,它是一个长度是4个字节的地址空间,并没有分配它指向的空间,也就是说,p的值是一个没有意义的地址值,显然*p也是没有意义的,当执行*p=10; 语句时肯定出错,改正的方法是先分配平指向的空间,再赋值
int* p=new int;
*p=10
2017/7/4
指针的用法
错误用法二
上面的语句是否可以写成这样呢?
int* p=10;
注意:p是一个指针变量,不能赋常量值。
但是以下语句是正确的:
char* p=“string”;
这是因为计算机先给字符串“string”分配一个空间,并将其首地址赋值给p。但是要注意的是p指向的是单个字符,如以下语句
cout<<“*p”<<*p<<endl;
只输出s,要想输出整个字符串,应该为:
cout<<“p=”<<p<<endl;
2017/7/4
指针的用法
前面列举了两种可能误用指针的例子
从前面的例子可以看出指针使用的繁琐,
但是为什么还要使用指针呢?
原因:1 指针和数组相比,如果利用下标访问元素,指针比数组要处理起来快
2017/7/4
一维指针数组的指针表示法
Int a[5];//a是一维数组名,它有五个int型变量。
当用指针表示时,*(a+i)与a[i](其中,i=1,2,3,4,5)是相同的。常量指针与变量指针是有区别的。例如:
int a[10],*p;
p=a;
表达式p+1,a+2,p=p+1,p-a等都是合法的;而表达式a=a+1,a=a-1等是非法的。为什么?
2017/7/4
二维指针数组的指针表示法
例如:
int b[2][3];//b是二维数组名,它有个int型变量
当用指针表示时,*(*(b+i)+j)与b[i][j]
(其中i=0,1;j=0,1,2)是相同的。一个二维数组可以看成是一个一维数组,即行数组,每个元素(即每个行数组)又是具有3个元素的一维数组,称为列数组。因此,b[2][3]可以看成2个元素的一维行数组和3个元素的一维数组,称为列数组。因此,b[2][3]可以看成为2个元素的一维行数组和3个元素的一维列数组组成。前面讲过了一维数组的指针表示,将二维数组的行,列的一维数组都用指针表示,便得到如下形式:
*(*(b+i)+j)
2017/7/4
培训演讲稿二 来自淘豆网m.daumloan.com转载请标明出处.