c++课上关于指针的一个例子

来源:互联网 发布:里约奥运会网络直播 编辑:程序博客网 时间:2024/05/17 04:51
#include <iostream>using namespace std;int main(){int a3[2][2][3]={1,2,3,4,5,6,7,8,9,10,11,12};int i=0,j=0,k=0;//用三维数组表示for(i=0;i<2;i++)for(j=0;j<2;j++)for(k=0;k<3;k++)cout<<a3[i][j][k]<<" ";cout<<endl;//用一维数组表示    int *p1;    p1=(int *)a3;//将三维数组的指针强制转化为一个int的指针    for(i=0;i<2*2*3;i++){        cout<<p1[i]<<" ";    }    cout<<endl;//用二维数组表示,报错???/*    int[4] (*p2) =(int[4] (*))a3;//将三维数组的指针强制转化为一个一维int数组的指针,即一个指针数组    for(i=0;i<3;i++)        for(j=0;j<4;j++)            cout<<p2[i][j]<<" ";    cout<<endl;*///这种表示方法和上面一样, 但更易理解,上面程序为什么跑不了?    typedef int T1[4];    T1 *p2=(T1 *)a3;    for(i=0;i<3;i++)        for(j=0;j<4;j++)            cout<<p2[i][j]<<" ";    cout<<endl;    cout<< "-------------------------------------" <<endl;    int a1[12]={1,2,3,4,5,6,7,8,9,10,11,12};    for(i=0;i<12;i++)        cout<<a1[i]<<" ";    cout<<endl;    int (*p22)[4]=(int (*)[4])a1;    for(i=0;i<3;i++)        for(j=0;j<4;j++)            cout<<p22[i][j]<<" ";    cout<<endl;    typedef int T11[3];    typedef T11 T22[2];    T22 *p33 =(T22 *)a1;for(i=0;i<2;i++)for(j=0;j<2;j++)for(k=0;k<3;k++)                cout<<p33[i][j][k]<<" ";    cout<<endl;    cout<< "-------------------------------------" <<endl;    char s1[2][8]={"abc","123"};    for(i=0;i<2;i++)        for(j=0;j<8;j++)            cout<<&s1[i][j]<<" : "<<s1[i][j]<<endl;//&s1[i][j]返回的是char*    cout<<endl;    cout<< "-------------------------------------" <<endl;    char s2[2][8]={"abc","123"};    for(i=0;i<2;i++)        for(j=0;j<8;j++)            cout<<(void *)&s2[i][j]<<" : "<<s2[i][j]<<endl;    cout<<endl;    cout<< "-------------------------------------" <<endl;    char *s3[2]={"abc","123"};    for(i=0;i<2;i++){        cout<<&s3[i]<<" : "<<(void *)s3[i]<<endl;        char *q=s3[i];j=0;        do{            cout<<(void *)(q+j)<<" : "<<q[j]<<endl;        }while(q[j++]!='\0');    }    cout<< "-------------------------------------" <<endl;}