//===================================================== // Name : Pointer1.cpp // Author : lf // Version : 《C++语言基础教程》 吕凤翥 P41——P45 2.5.2 // Description : 指针数组和指向数组的指针以及字符指针 //===================================================== #include <iostream> using namespace std; int main() { cout<<"<----指针小复习---->"<<endl; int a=5; int *pa=&a; cout <<"取出指针里面保存的地址的方式:pa="<<pa<<endl; cout <<"取出指针里面保存的地址所表示的值的方式:*pa="<<*pa<<endl; cout<<"--------------------------"<<endl; cout<<"<----指针数组---->"<<endl; int b[3]={1,2,3}; int *pb[]={&b[0],&b[1],&b[2]}; //*pb指向了数组的第一个元素即&b[0],这是一个地址 //**pb表示将该地址对应的值取出.以下类似 cout<<"**pb="<<**pb<<endl; cout<<"*(*pb+1)="<<*(*pb+1)<<endl; cout<<"*(*pb+2)="<<*(*pb+2)<<endl; cout<<"--------------------------"<<endl; int c[3]={1,2,3}; int *pc[3]; pc[0]=&c[0]; pc[1]=&c[1]; cout<<"<----C++规定:任何数组的数组名都是一个常量指针,其值是该数组首元素的地址值---->"<<endl; cout<<"<----所以:c+2表示c[2]的地址---->"<<endl; *(pc+2)=c+2; cout<<"*pc[0]="<<*pc[0]<<",**(pc+1)="<<**(pc+1)<<",*pc[2]="<<*pc[2]<<endl; cout<<"--------------------------"<<endl; cout<<"<----指向数组的指针---->"<<endl; int d[2][3]={1,2,3,4,5,6}; int (*pd)[3]; cout<<"<----C++规定:任何数组的数组名都是一个常量指针,其值是该数组首元素的地址值---->"<<endl; cout<<"<----所以:pd=d+1表示pd指向了数组d的第1行(行数从0开始)---->"<<endl; cout<<"<----这样就可以用pd表示数组d的各元素值,比如pd[0][0]表示d[1][0]---->"<<endl; cout<<"<----关于该示例,需要进一步探讨.请参见书本P42---->"<<endl; pd=d+1; cout<<"pd[0][1]="<<pd[0][1]<<endl; cout<<"pd[-1][0]="<<pd[-1][0]<<endl; cout<<"pd[0][0]="<<pd[0][0]<<endl; cout<<"*(*pd+2)="<<*(*pd+2)<<endl; cout<<"--------------------------"<<endl; cout<<"<----字符指针---->"<<endl; cout<<"<----字符指针是指向字符串的指针---->"<<endl; char *p,s1[10],s2[10]; p="teacher"; for(int i=0;i<7;i++){ s1[i]=*p++ +1; } s1[7]='\0'; cout<<"s1="<<s1<<endl; for(int i=0;i<7;i++){ s2[i]=*(s1+i)-1; } s2[7]='\0'; cout<<"s2="<<s2<<endl; cout<<"--------------------------"<<endl; cout<<"<----字符指针数组---->"<<endl; cout<<"<----字符指针数组是指元素为字符指针的数组---->"<<endl; char *s[3]={"char","long","int"}; s[0]="double"; *(s+1)="float"; cout<<"s[0]="<<s[0]<<endl; cout<<"*(s+1)="<<*(s+1)<<endl; cout<<"s[2]="<<s[2]<<endl; cout<<"*(*s+2)="<<*(*s+2)<<",*(s[2]+1)="<<*(s[2]+1)<<endl; return 0; }