2013-03-05 28 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]相同,但是該值取自較高的索引。

相關問題