我得到了一个意想不到的输出

时间:2013-08-01 10:19:14

标签: c

在我的书中,给出了这段代码。他们说输出是2 2 2 2 2 2 3 4 6 5 请解释这是否正确?如果不是那么什么是正确的o / p?

#include <stdio.h>
#include <string.h>

main()
{
   int c[]={2,8,3,4,4,6,7,5};
   int j,*p=c,*q=c;
   for(j=0;j<5;j++){
       printf(" %d",*c);
       ++q;

   }
   for(j=0;j<5;j++){
       printf(" %d",*p);
       ++p;
   }
}

1 个答案:

答案 0 :(得分:1)

在第一个for循环中,您正在打印*c而不是*q

printf(" %d",*c);  // outputs `2 2 2 2 2` as first element, five times

应该是:

printf(" %d",*q);

我注意到你增加了q

由于2 2 2 2 2,{p}输出为*cc衰减到此表达式中第一个元素的地址。

修改

根据你的代码输出应该是@ChronoTrigge建议的(我注意后者):

如上所述,第一个循环输出五次2

第二个循环将输出数组a[]中的前五个元素,因此输出应为:2 8 3 4 4

完整输出:2 2 2 2 2 2 8 3 4 4