//=====================================================
// 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;
}
C++基础教程(五)——指针(2),布布扣,bubuko.com
C++基础教程(五)——指针(2)