//(*p)[N] 指向由N个元素组成的一维数组的指针变量。
//p一定要指向行地址(p是按行动)。p是指向一维数组的指针。p的值即*p指向一维数组的起始地址(加*变成列地址)
#include <iostream>
using namespace std;
int main()
{ int array_1[3]={7,8,9};
int array_2[2][3]={{1,2,3},{4,5,6}};
int (*p)[3];
int (*q)[3];
int i;
p = &array_1; //一维数组中数组名array_1 默认代表的是行地址,取&变成列地址
cout<<*p<<endl;
cout<<p<<endl; //p与*p都指向同一地址。但p是行地址,*q是列地址,即&q[0],表面上是*与&抵消又成p,但实际是行与列的区别
for (i = 0;i<3;i++)
{
cout<<(*p)[i]<<" ";//*p是列地址,即p[0]
}
for (q = array_2;q<array_2+2;q++) // 一维数组中数组名array_2 默认代表的是行地址
{
cout<<q<<endl;
cout<<*q<<endl; //q与*q都指向同一地址。但q是行地址,*q是列地址,即q[i][0],i表示第几行
cout<<(*q)[0]<<endl; //一维数组用这种。
cout<<*(*(q))<<" "<<endl;
cout<<*(*(q+0)+0); //二维数组用这种
}
return 0;
}
//p一定要指向行地址(p是按行动)。p是指向一维数组的指针。p的值即*p指向一维数组的起始地址(加*变成列地址)
#include <iostream>
using namespace std;
int main()
{ int array_1[3]={7,8,9};
int array_2[2][3]={{1,2,3},{4,5,6}};
int (*p)[3];
int (*q)[3];
int i;
p = &array_1; //一维数组中数组名array_1 默认代表的是行地址,取&变成列地址
cout<<*p<<endl;
cout<<p<<endl; //p与*p都指向同一地址。但p是行地址,*q是列地址,即&q[0],表面上是*与&抵消又成p,但实际是行与列的区别
for (i = 0;i<3;i++)
{
cout<<(*p)[i]<<" ";//*p是列地址,即p[0]
}
for (q = array_2;q<array_2+2;q++) // 一维数组中数组名array_2 默认代表的是行地址
{
cout<<q<<endl;
cout<<*q<<endl; //q与*q都指向同一地址。但q是行地址,*q是列地址,即q[i][0],i表示第几行
cout<<(*q)[0]<<endl; //一维数组用这种。
cout<<*(*(q))<<" "<<endl;
cout<<*(*(q+0)+0); //二维数组用这种
}
return 0;
}