C语言题目

下面程序的输出结果是_______.
main()
{int i,*p=&aa[0][0];
for(i=0;i<2;i++)
{if (i==0)
aa[i][i+1]=*p+1;
else
++p;
printf("%d,"*p);
}
}
解释一下这个程序.

第1个回答  2008-10-30
你好,其实也不难,定义时*p=&aa[0][0];的意义是指针p指向aa[0][0]的地址;进入for循环后,i==0的条件成立一次,不成立也是一次,那么亦就是说:aa[0][1]=*p+1;先执行一次,这时的*p=aa[0][0];所以,此时aa[0][1]=aa[0][0]+1,注意的是,*p+1的意思是*p的值加1,而不等同于*(p+1),*(p+1)的意思是地址加1,接住执行++p,p指向的地址加1,亦就是p现时指向aa[0][1]所在的地址,循环退出,输出*p;亦就是输出aa[0][1]的值,或者说输出aa[0][0]+1后的值,题目无说到aa[0][0]的值且无先定义aa数组是让我最觉得怪的地方。还有一段程序吧?!否则感觉会出错
第2个回答  2008-10-30
你的程序编译错误:
1.数组aa没有定义,aa[0][0]没有初始化
2.输出数组元素那句","位置不对
main()
{int i,*p=&aa[0][0]; //指针p指向数组的第0行0列元素
for(i=0;i<2;i++)
{if (i==0)
aa[i][i+1]=*p+1; //给数组aa的元素赋值
else
++p; //使指针p指向数组下一个元素
printf("%d,"*p); //输出数组元素printf("%d",*p);
}
}本回答被提问者采纳
第3个回答  2008-10-30
// 这样改一下的话,就能运行了,不过不知道你想要这个程序想实现什么功
// 能。

#include <stdio.h>

main()
{

int i;
int aa[][2] = {0,1,2,3};
int (*p)[2] = aa;

for(i=0;i<2;i++)
{
if (i == 0)
aa[i][i+1] = *p[i];
else
++p;
printf("%d\n",*p[i]); /* i=1时,这个输出的值 已经是任意数*/
}
}
第4个回答  2008-10-30
程序本身就有错误
二维数组没有定义,也没有初始话,输出应该是随意的值
输出的先是aa[0][0]的值,然后再输出aa[0][1]的值
第5个回答  2008-10-30
你aa的数组都没定义呢
相似回答