标签:
例子:
int i,j; int x[2][3]={{1,2,3},{4,5,6}}; int *p[2]={x[0],x[1]};//声明一个含有2个元素的一维int指针数组p for(i=0;i<2;i++) { for(j=0;j<3;j++) { cout<<*(p[i]+j)<<endl; } }
输出语句为cout<<p[i][j]<<endl;也是可以的。
int i,j; int x[2][3]={{1,2,3},{4,5,6}}; int *p=x[0];//x[0]不等价于x,经过程序已经验证。 for(;p<x[0]+6;p++) { printf("%d\t",*p); }
对比2中的例子,此时p加1是指向下一个元素,2中的例子p加1指向下一行元素的首地址。
int i,j; int x[2][3]={{1,2,3},{4,5,6}}; int (*p)[3]=x;//声明一个指向具有3个元素的int型数组的指针p //圆括号不可省略 for(i=0;i<2;i++) { for(j=0;j<3;j++) { cout<<p[i][j]<<endl; //或者cout<<*(*(p+i)+j)<<endl; } }
以上两种形式都紧扣数组在内存中存储的结构。指针数组比较好理解。数组指针没有理解呀,记住。。。。。。吼!!!
总的来说:二维数组中x代表行地址,x[0]代表元素地址。把握这个原则。
*p[2]={x[0],x[1]};//*(p[0]+i) return p; *p=x[0];//*(p+i) return p; (*p)[3]=x;//*(*(p+i)+j) return p[0];
还是有点乱。。不断修改中。
标签:
原文地址:http://www.cnblogs.com/dongzhuangdian/p/5059884.html