地址问题

 int a[2][5]={2,3,4,5,6,7,8,9,10,11};
   int*p=(int*)(a+1);
   cout<<*(p-3)<<endl;

a本身就是个地址常量,它的类型为int(*)[5],所以a+1的地址为7所在的地址。

所以输出为4。

int a[2][5]={2,3,4,5,6,7,8,9,10,11};
   int*p=(int*)(&a+1);
   cout<<*(p-3)<<endl;

&a可以理解为这个二维数组整体的地址(数值上和a相等),它的类型为int(*)[2][5],所以&a+1指向数组的末尾(11的下一个地址)。

所以输出为9。

 int a[8]={1,2,3,4,5,6,7,8};
  int (*p)[8];
  p=(int(*)[8])a;//p=&a;
  cout<<(*p)[3]<<endl;
p的类型为int(*)[8],a的类型为int*,所以要进行类型转换;   而&a的类型为int(*)[8],所以不用类型转换;输出均为4。


猜你喜欢

转载自blog.csdn.net/legends_never_die/article/details/79836406