如何解这道难以看懂的c++题

来源:百度知道 编辑:UC知道 时间:2024/07/02 08:40:47
20、 [单选题]下面程序的运行结果是___________。 #include<iostream.h> void main() { int x[3][2]={1,2,3,4,5,6}, *p,i; p=&x[0][0]; for (i=0; i<6; i++) *(p+i)=*p; cout<<*p+3; }

(A)、 2
(B)、 4
(C)、 1
(D)、 3
正确答案: B ,为什么呢?
程序写规范后:
#include<iostream.h>
void main()
{
int x[3][2]={1,2,3,4,5,6}, *p,i;
p=&x[0][0];
for (i=0; i<6; i++)
*(p+i)=*p;
cout<<*p+3;
}

迷惑点在这里:
for (i=0; i<6; i++)
*(p+i)=*p; /*将数组中前面元素的值赋个后一个元素*/
这样下来数组中所以元素的值都 等于了 第一个元素的值 1。

但是重点不在这里,重点是不管怎么循环指针 p 的值并没有变,始终指向数组第一个元素,
所以最后输出 *p+3 当然等于 1+3 = 4 咯。

我说的可明白?

p指向二维数组的首个元素,*p=1. 1+3=4.
中间的变换都是迷惑你的。

数组里面的后一个等于前一个的值,最先从第二个等于第一个,那就是第二个等于1,然后第三个等于第二个,也等于1,循环到第六个,也等于1了。最后输出1+3,等于4。

你还四级呢?!!!

#include<iostream.h>

void main()
{
int x[3][2]={1,2,3,4,5,6}, *p,i;
p=&x[0][0];//指向二维数组第一个数的地址 即1

for (i=0; i<6; i++)
{
*(p+i)=*p; //不用看左边,看右边就知道是1了
cout<<*p+3<<"\n"; //输出 1+3 你说能等于几呢?
}
}