关于一个c++编程题

来源:百度知道 编辑:UC知道 时间:2024/05/09 04:07:25
#include <iostream.h>
int n[][3]={10,20,30,40,50,60};
int main()
{int (*p)[3];
p=n;
cout << p[0][0] << "," << **(++p) << "," << **p <<endl;
return 0;
}
结果输出结果为什么是40,40,10
而我改成
#include <iostream.h>
int n[][3]={10,20,30,40,50,60};
int main()
{int (*p)[3];
p=n;
cout << p[0][0] <<endl;
cout << **(++p) <<endl;
cout << **p <<endl;
return 0;
}
后,结果就变10
40
40

求高手指点。。。。
主要是为什么输出结果是40,40,10
主要是第一个和第三个。。。。不理解啊。。。

1,cout<<a<<b等价于operator<<(operator<<(cout,a),b)把operator<<看做一个函数,其参数被评估的顺序和编译器有关,VC是先处理第二个参数b;
2.p是一个数组指针,指向int[3]的数组,所以p+1(++p)实际上偏移了整个数组,3个int单位;
3,cout<<p[0][0]<<**(++p)等价于operator<<(operator<<(cout,p[0][0]),
**(++p))你的编译器先执行**(++p)使*p指向40,然后执行operator<<(cout,
p[0][0])打印出40;
4.....

BUG!!! 这就是规范死角的BUG!!!!!!!! TAT

是运算优先级在cout << p[0][0] << "," << **(++p) << "," << **p <<endl;
这句话中(++)的运算优先级高于<<,所以先计算++p,这样p就下移三个位置,故为40