C 我得到了一个意想不到的输出
在我的书中,给出了这个代码。他们说输出是C 我得到了一个意想不到的输出,c,C,在我的书中,给出了这个代码。他们说输出是223465 请解释一下这是否正确?如果不是,那么正确的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
223465
请解释一下这是否正确?如果不是,那么正确的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;
}
}
#包括
#包括
main()
{
int c[]={2,8,3,4,4,6,7,5};
int j,*p=c,*q=c;
对于(j=0;j在第一个for循环中,您打印的是*c
,而不是*q
:
printf(" %d",*c); // outputs `2 2 2 2 2` as first element, five times
应该是:
printf(" %d",*q);
正如我所注意到的,您增加了q
由于*c
,c
衰减为该表达式中第一个元素的地址,因此第一个循环中的输出为2
编辑
根据您的代码输出,应按照@ChronoTrigge的建议(我注意到后者):
如上所述,第一个循环输出五次2
第二个循环将输出数组a[]
中的前五个元素,因此输出应该是:28344
完整输出:2 2 2 2 8 3 4 4
输出应为2 2 2 2 8 3 4 4 4我强烈建议您使用调试器查找运行时“错误”这种类型的。通过这种方式,你不仅可以在大多数情况下找到bug,还可以学到很多关于编程本身的知识。如果你想学习,请自己调试……这将使你能够可视化代码执行。