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。