-1

在我的书中,给出了这段代码。他们说输出是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;
   }
}
4

1 回答 1

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在第一个循环中,因为*c,c衰减到该表达式中第一个元素的地址。

编辑

根据您的代码输出应如@ChronoTrigge 建议的那样(我注意到后者):

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

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

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

于 2013-08-01T10:21:50.373 回答