2013-03-05 26 views
-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 *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个输出。为什么?

+1

'* p = b [i] -1;'每次用'b [i] -1'替换'b [0]'的值。所以在第一个使用'i = 0'的循环中,你正在递减'b [0]'。 – koopajah 2013-03-05 14:36:34

+6

很奇怪http://stackoverflow.com/questions/15224892/c-pointers-and-array必须是一个家庭作业:) – 2013-03-05 14:36:59

回答

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; 
} 
+0

感谢它工作:) – 2013-03-05 14:46:27

4

p=b;设置p指向b[0]。所以尽管b[0]增加了b[i]=a[i]+1;,但它减少了*p=b[i]-1;

+0

帮助我解决它,而不创建下一个阵列 – 2013-03-05 14:54:40

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 
+0

我如何删除此错误,而不创建另一个数组? – 2013-03-05 14:52:12

1

的关键是设定压力P = B。 p和b都是指针,这意味着* p和b [0]都指向相同的数据。

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

相关问题