#include "iostream"
using namespace std;
int main(void)
{
int a[4][4] = {
{1,2,3,4},
{50,60,70,80},
{900,1000,1100,1200},
{13000,14000,15000,16000} };
int (*p1)[4] = a;
int (*p2)[4] = &a[0];
int *p3 = &a[0][0];
cout<<*(a+1)<<endl;//0018FF18
cout<<*(*(a+1))<<endl;//50
cout<<*(a+1)-1<<endl;//0018FF14
cout<<*(*(a+1)-1)<<endl;//4
cout<<*(*(a+1)+1)<<endl;//60
/*
二维数组指针地址加减1是地址的位移
*/
cout<<"地址是否相等"<<(p1 == a)<<endl;
cout<<"地址是否相等"<<(p1[0] == a[0])<<endl;
cout<<"地址是否相等"<<(*(p1+1) == *(a+1))<<endl;
cout<<"值是否相等"<<(*(*(p1+1) + 1) == *(*(a+1)+1))<<endl;
cout<<"地址是否相等"<<(p2 == a)<<endl;
cout<<"地址是否相等"<<(p2[0] == a[0])<<endl;
cout<<"地址是否相等"<<(*(p2+1) == *(a+1))<<endl;
cout<<"值是否相等"<<(*(*(p2+1) + 1) == *(*(a+1)+1))<<endl;
cout<<sizeof(p1)<<endl;
printf("%d %d %d %d\n",*(*(a+1)-1),*(*(p1+3)-2)+1,*(*(p2-1)+16)+2,*(p3+sizeof(p1)-3));
return 0;
}
int main(void)
{
int a[4][4] = {
{1,2,3,4},
{50,60,70,80},
{900,1000,1100,1200},
{13000,14000,15000,16000} };
int (*p1)[4] = a;
int (*p2)[4] = &a[0];
int *p3 = &a[0][0];
printf("%d %d %d %d\n",*(*(a+1)-1),*(*(p1+3)-2)+1,*(*(p2-1)+16)+2,*(p3+sizeof(p1)-3));
return 0;
}
int (*p)[4]中的p是一个指针,指向的对象是一个具有4个int类型元素的一维数组;
int *p[4]中的p是一个数组名,这个数组的元素是指向int类型对象的指针。注意这里的p不是指针,数组名与指针是不同的。