我在程序中找不到任何错误,但它没有提供所需的输出

时间:2013-03-05 14:33:21

标签: c printing for-loop

#include <stdlib.h>
#include <stdio.h>

int main(void)
{

int a[]={1,2,3,4,5};
int b[]={0,0,0,0,0};
int *p;
int i;
p=b;
for( i =0 ; i<5 ; i++)
{
    b[i]=a[i]+1;
    *p=b[i]-1;
    printf(" %i \t %i \t %i \n" ,*p,b[i],a[i]);

}
return 0;
}

我希望输出为:

*p   b   a
 1   2   1
 2   3   2
 3   4   3
 4   5   4
 5   6   5

但显示如下:

*p   b   a
 1   1   1
 2   3   2
 3   4   3
 4   5   4
 5   6   5        

即使我在每个[]中添加+1。但对于第一次打印,它显示1输出。为什么?

4 个答案:

答案 0 :(得分:4)

p=b;设置p以指向b[0]。因此,虽然b[0]增加b[i]=a[i]+1;,但它会递减*p=b[i]-1;

答案 1 :(得分:1)

问题是:

int a[]={1,2,3,4,5};
int b[]={0,0,0,0,0};
int *p;
int i;
p=b; // <<---- HERE

你使p指向数组b的第一个元素,然后在此代码中:

b[i] = a[i]+1;
*p = b[i]-1;

虽然您将值2分配给第一个元素,*p = b[i]-1;会再次使用1重写它,这就是输出的第一行是:

1 1 1

答案 2 :(得分:1)

这将是您的计划的有效版本:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{

int a[]={1,2,3,4,5};
int b[]={0,0,0,0,0};
int c[]={0,0,0,0,0}; //another array
int *p;
int i;
p=c; // point p to a new array to write to.
for( i =0 ; i<5 ; i++)
{
    b[i]=a[i]+1;
    *p=(b[i]-1);
    printf(" %i \t %i \t %i \n" ,*p,b[i],a[i]);

}
return 0;
}

答案 3 :(得分:1)

关键是设置p = b。 p和b都是指针,这意味着* p和b [0]都指的是相同的数据。

在循环的第一次迭代中,首先将一个添加到b [0]然后再减去一个。对于以下迭代,* p仍然与b [0]相同,但该值取自较高的索引。