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;}