C++基础教程(四)——指针(3)

//=====================================================
// 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++基础教程(四)——指针(3),布布扣,bubuko.com

C++基础教程(四)——指针(3)

上一篇:Java设计模式之从[欢迎界面]分析模板方法(Template Method)模式


下一篇:Python3.2官方文档翻译--异常处理