int i,j=0,(*p)[4]=a,*q=a[0];
首先给你解释这句话 前面的 i j不解释
(*p)[4]=a 这句话相当于 int (*p)[4]=a;
他的意思是定义了指向 长度为4的 整形数组 的指针p
那么a是一个指向长度为4的整形数组的二级指针 那么p=a;
p也就指向了该数组(但也是二级指针)
int *q=a[0];这句话的意思是定义整形指针q a是二级指针 那么a[0]还会是指针 a[0]
指向了第一个长度为4的整形数组 所以q也就指向了第一个长度为4的整形数组
if(i==1)
(*p)[i+i/2]=*q+1;
这句话的意思是 首先p是一个二级指针那么*p也是第一个长度为4的整形数组的首地址那么
(*p)[i]也就是第一个长度为4的整形数组的第i个元素 如果i等于1 那么i+i/2=1+0=1 而且根据后面的
else语句 p 要指向下一个长度为4的整形数组 q要指向第一个长度为4的整形数组的下一个元素也就是 a[0][1]
所以(*p)[i+i/2] 相当于 a[1][1]也就是18 而a[0][1]=29 再加1也就是30了 所以
现在的数组就变成了a[3][4]={6,29,22,12, 5,
30,21,36, 33,19,66,32};
for(i=0;i<3;i++)
cout<<a[i][i]<<" ";这句话当然就是输出 6 30 66
*((int *)p)这句的意思是把p强制转化成指向整形的一级指针 因为前面的循环p++
此时p指向的是最后一个长度为4的整形数组 那么*p就是33了 同理*q 经过q++之后也就指向了
第一个长度为4的整形数组的最后一个元素 *q 也就是12了
这代码是谁写的!!!!!!!!!!!! 哪有这么用指针的!!!!!!!
考谁呢!!!!!!!!!! 好累 楼主觉得合适就给点分 在此谢过了