C++_第4章___指针和引用.ppt
文本预览下载声明
第四章 指针和引用;【指针常量和指针变量 】;指针也可以和其他变量同时声明;(1)两个特殊的指针操作符是和*。; *称为取值操作,也是一元操作符,操作数只能是指针变量,功能是返回指针所指向的变量的值。 ;说明:没有明确地给指针赋一个地址值,因而其值是随机的。;【例4.1】 简单指针变量。
#includeiostream.h
int main(int argc, char *argv[])
{
float x,y;
float *px,*py;
px=x;//A: px指向x
py=y;// B: py指向y
*px=3.14;//将3.14送入px指向的单元(X)中
*py=4.21;//将4.12送入py指向的单元(y)中
if(xy) coutx;
else couty;
return 0;
} ;(2)指针的 算术运算;利用指针对数组进行操作时,也必须注意越界问题。
比如: int x[5];
int *p=x; //指针p指向数组x的首地址
p= p+5;
*p=10;;比如: int x[5],i;
int *p1=x[1], *p2=x[4];
i=p2-p1;;声明二级指针的形式如下:
数据类型 **标识符;#includeiostream.h
#includestring.h
void main()
{
char **p;
char a=x,*q=a;
p=q;
cout**pendl;
}
输出结果是:
x;4.1.2 指针的应用;【例4.5】定义指向指针的指针变量。观察对这种指针变量间接访问的结果。
#includeiostream.h
void main()
{
int va=100,*pva,**ppva;
int k1=100;
pva=va;
cout*pva=*pvaendl; //间接访问结果是整型数
ppva=pva;
cout*ppva=*ppvaendl; //间接访问结果是地址
coutpva=pvaendl; //就是指针pva的内容
}
程序运行结果为:
*pva=100
*ppva=0x0012FF7C
pva=0x0012FF7C;【例4.6 】 构建人员档案链表;for(i=1;;i++){
couti name:;
cintemp-name;
if(temp-name[0]!=*){
cout age,sex:;
cintemp-agetemp-sex;
temp-next=NULL;
tail=temp;
}
else{
delete temp;
tail-next=NULL;
break;
}
temp-next=new person;
temp=temp-next;
}
//此for语句的运行完成人员档案资料表的输入,以*作为人名即可停止输入。 ;temp=head;
while (temp!=NULL)
{
coutendltemp-name temp-age;
cout temp-sex;
temp=temp-next;
}
}
;4.1.3 指针与数组;}
int main(int argc, char *argv[])
{
int s[][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
coutendl*((int *)s+2*3+1)*(s[0][0]+2*3+1);
//输出s[2][1]两次,即88
show_matrix(s[0][0],4,3,5);
coutendl;
coutendlendl按回车键继续...;
cin.get();
return 0;
}
程序的输出是:
88
1 2 3
4 5 6
7 8 9
10 11 12;数组名是指针常量,而不是指针变量。
如: int array[100];
则:array=array[1];(×)
指针的加减
指针加减的含义:
☆指针+1:指针向后移动一个数组元素。
☆指针-1: 指针向前移动一个数组元素。;10;假设一个二维数组:int x[2][3];
则数组中的元素x[i][j]有多种访问方法,以下是其中的一部分:
*(*(x+i)+j)
*(x[i]+j)
*(x+i)[j]
*(x+3*i+j);【指针与字符串 】;
显示全部