int *p[4]
p是一个指针数组, 每一个数组元素指向一个int型数据.
int (*q)[4]
q是一个指针, 指向一个int[4]的数组.
int main()
{
int *p[4];
int a = 1, b = 2, c = 3, d = 4, e = 5;
p[0] = &a;
p[1] = &b;
p[2] = &c;
p[3] = &d;
p[4] = &e;
//*p = &a;
//*(p+1) = &b;
//*(p+2) = &c;
//*(p+3) = &d;
//*(p+4) = &e;
cout << " p value:" << p << " &p[0] value:" << &p[0] << endl;
cout << " p+1 value:" << p + 1 << " &p[1] value:" << &p[1] << endl;
cout << "p[0] value:" << p[0] << " a value:" << &a << endl;
cout << "p[1] value:" << p[1] << " a value:" << &b << endl;
cout << "p[0] value:" << p[0] << *(p[0]) << " a value:" << a << endl;
cout << "p[1] value:" << p[1] << *(p[1]) << " b value:" << b << endl;
cout << "p[2] value:" << p[2] << *(p[2]) << " c value:" << c << endl;
cout << "p[3] value:" << p[3] << *(p[3]) << " d value:" << d << endl;
cout << "p[4] value:" << p[4] << *(p[4]) << " e value:" << e << endl;
}
Result:
p value:0x7fff53e13c20 &p[0] value:0x7fff53e13c20
p+1 value:0x7fff53e13c28 &p[1] value:0x7fff53e13c28
p[0] value:0x7fff53e13b78 a value:0x7fff53e13b78
p[1] value:0x7fff53e13b74 b value:0x7fff53e13b74
p[0] value:0x7fff53e13b781 a value:1
p[1] value:0x7fff53e13b742 b value:2
p[2] value:0x7fff53e13b703 c value:3
p[3] value:0x7fff53e13b6c4 d value:4
p[4] value:0x7fff53e13b685 e value:5
int main()
{
//q是一个指针,指向int[4]数组
int (*q)[4];
int a[4] = {5, 6, 7, 8};
int *p1;
int *p2;
q = &a;
p1 = a;
p2 = q[0];
cout <<" p1 value:" <<p1 <<" sizeof(p1):" <<sizeof(p1) <<endl;
cout <<" p2 value:" <<p2 <<" sizeof(p2):" <<sizeof(p2) <<endl;
cout <<" a value:" <<a <<" sizeof(a):" <<sizeof(a) <<endl;
cout <<" q value:" <<q <<" sizeof(q):" <<sizeof(q) <<endl;
cout <<" &a value:" <<&a <<endl;
cout <<"a[0] value:" <<&a[0] <<endl;
cout <<"a[1] value:" <<&a[1] <<endl;
cout <<"a[2] value:" <<&a[2] <<endl;
cout <<"a[3] value:" <<&a[3] <<endl<<endl;
cout << "q[i]:" << endl;
for(int i = 0; i < 4; ++i){
cout <<i <<" " <<" " <<q[i] <<" " <<q+i << endl;
}
cout << "q[i] value:" << endl;
for(int i = 0; i < 4; i++) {
cout << q[0][i] <<(*q)[i] <<p1[i] <<p2[i] <<" ";
}
cout << endl;
}
Result:
p1 value:0x7fff574bbc30 sizeof(p1):8
p2 value:0x7fff574bbc30 sizeof(p2):8
a value:0x7fff574bbc30 sizeof(a):16
q value:0x7fff574bbc30 sizeof(q):8
&a value:0x7fff574bbc30
a[0] value:0x7fff574bbc30
a[1] value:0x7fff574bbc34
a[2] value:0x7fff574bbc38
a[3] value:0x7fff574bbc3c
q[i]:
0 0x7fff574bbc30 0x7fff574bbc30
1 0x7fff574bbc40 0x7fff574bbc40
2 0x7fff574bbc50 0x7fff574bbc50
3 0x7fff574bbc60 0x7fff574bbc60
q[i] value:
5555 6666 7777 8888
以下为转载
定义涉及两个运算符:“”(间接引用)、“[]”(下标),“[]”的优先级别大于“”的优先级别。
1. 详解
int *p[4]
, []
的优先级别高,所以它首先是个大小为4的数组,即p[4]
;剩下的int *
作为补充说明,即说明该数组的每一个元素为指向一个整型类型的指针。int *p[4]
的存储结构如下:(存储方格横向排列或竖向排列没区别,只要按内存地址顺序排列就行,此处只是为画图方便)
int (*q)[4]
, 它首先是个指针,即*q
,剩下的int [4]
作为补充说明,即说明指针q指向一个长度为4的数组。int (*q)[4]
的存储结构如下:
2. 实例:
int a[2][4]={{2,5,6,8},{22,55,66,88}};
int c[4]={5,8,9,4};
int d[3]={23,12,443};
int *p[4],(*q)[4];
q=a;
*p=c;
*(p+1)=d;
则int *p[4]和int (*q)[4]的存储数据为:
3. 实例代码
int main()
{
int a[2][4]={{2,5,6,8},{22,55,66,88}};
int c[4]={5,8,9,4};
int d[3]={23,12,443};
int *p[4],(*q)[4];
q=a;
*p=c;
*(p+1)=d;
int i,j;
for(i=0;i<2;i++) {
for(j=0;j<4;j++) {
if((i==1)&&(j==3)) break;
printf("*(*(p+%d)+%d)=%d\n",i,j,*(*(p+i)+j));
}
}
puts("***************************");
for(i=0;i<2;i++){
for(j=0;j<4;j++) {
printf("*(*(q+%d)+%d)=%d\n",i,j,*(*(q+i)+j));
}
}
puts("***************************");
}