C++基础教程(五)——指针(2)
//===================================================== // Name : Pointer1.cpp // Author : lf // Version : 《C++语言基础教程》 吕凤翥 P38——P43 2.5.2 // Description : 指针和数组 // Tips : // 在C++中,数组的元素可以用下标表示,也可以用指针表示. // 但是最好是用指针表示,因为指针表示要比下标表示处理起来要快. // 所以在C++中尽量使用指针来引用数组元素 //===================================================== #include <iostream> using namespace std; int main() { cout<<"<----数组元素的指针表示---->"<<endl; int a[5]={3,4,5,6,7}; //一维数组元素下标表示方法 //a[i],其中i=0,1,2,3,4 //一维数组元素指针表示法 //*(a+i),其中i=0,1,2,3,4 int number1=*(a+2); cout<<"number1="<<number1<<endl; cout<<"--------------------------"<<endl; //二维数组元素下标表示方法 //b[i][j],其中i=0,1;j=0,1,2,3,4 //二维数组元素指针表示法 //*(*(b+i)+j),其中i=0,1;j=0,1,2,3,4 int b[2][5]={{1,2,3,4,5},{6,7,8,9,0}}; int number2=*(*(b+1)+1); cout<<"number2="<<number2<<endl; //将二维数组元素的行用下标表示,列用指针表示的形式: //*(b[i]+j) int number3=*(b[1]+1); cout<<"number3="<<number3<<endl; //将二维数组元素的列用下标表示,行用指针表示的形式: //(*(b+i))[j] int number4=(*(b+1))[2]; cout<<"number4="<<number4<<endl; //按二维数组各个元素在内存的存放的顺序,用指向数组首元素的一级指针的表示形式: //*(&b[0][0]+5*i+j) int number5=*(&b[0][0]+5*1+3); cout<<"number5="<<number5<<endl; cout<<"--------------------------"<<endl; static int f[5]={5,4,3,2,1}; int i,j; i=f[0]+f[4]; j=*(f+2)+*(f+4); cout<<"i="<<i<<",j="<<j<<endl; cout<<"--------------------------"<<endl; static char s1[]="abcde"; static char s2[5]={‘m‘,‘n‘,‘p‘,‘q‘,‘\0‘}; char *ps=s1; //输出一个字符串时,可使用字符数组名或指向该字符串首地址的指针名 cout<<"s1="<<s1<<",s2="<<s2<<endl; //注意这里的*ps+2,*ps指向的是字符a所以在执行*ps+2会把字符转换为整型即字符a对于的ASCII码97,所以结果为99 cout<<"*ps="<<*ps<<",*(ps+2)="<<*(ps+2)<<",*(ps+4)="<<*(ps+4)<<",*ps+2="<<*ps+2<<endl; //同理 char charc=‘c‘; cout<<"charc+2="<<charc+2<<endl; cout<<"--------------------------"<<endl; static int e[][3]={{1,2,3},{4},{5,6}}; e[0][2]=7; e[1][2]=8; //形成数组: // 1 2 7 // 4 0 8 // 5 6 0 // 指针分析: // *e指向了数组e的第一个元素{1,2,3},所以**e指向了{1,2,3}的第一个元素为1 // *(e+1)指向了数组e的第二个元素{4,0,8},所以**(e+1)指向了{4,0,8}的第一个元素为4 // *(e+1)指向了数组e的第二个元素{4,0,8},所以*(*(e+1)+2)指向了{4,0,8}的第三元素为8 cout<<"**e="<<**e<<",**(e+1)="<<**(e+1)<<",*(*(e+1)+2)="<<*(*(e+1)+2)<<endl; cout<<"e[0][2]="<<e[0][2]<<",e[1][2]="<<e[1][2]<<",e[2][2]="<<e[2][2]<<endl; return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。