2012-11-23 139 views
0

我有點困惑。請看下面的程序:從函數返回數組c

#include<stdio.h> 
void display (int *j, int *k); 

int main() 
{ 
    int num1[]={1,2,3,4,5}; 
    int num2[5]; 
    int i; 
    display (num1,num2); 
    for (i=0;i<=4;i++) 
     printf("%d,", num2[i]); 
    return 0; 
} 

void display (int *j, int *k) 
{ 
    int l; 
    for (l=0;l<=4;l++) 
    { 
     k=j; 
     printf("%d,", *k); 
     j++; 
     k++;   
    } 

} 

在這種printf("%d,", num2[i]);沒有給數組。但是,當我們在函數中放入*k=*j;時它會起作用。你能解釋爲什麼嗎?謝謝。

+4

無論誰試圖編輯這篇文章:修正縮進是好的,改變編碼風格以適應你自己的個人喜好不是,這被認爲是改變代碼的含義。 – Lundin

回答

0

因爲您還沒有初始化數組num2也沒有從num1複製它。

+0

對不起,但它已經從函數調用? – Justine

1

k=j將指針k分配給指針j的值(指向地址)。這將切換指向哪個數組(num1num2k指向但不更改任何數組元素的值。

*k=*j設置數組元素k指向指向數組元素j指向的值。

0

*k = *j將「單元格」j點的內容複製到指向單元格k指向的內容。相反,k = j使得k指向j點。如果你考慮這個,k = j是錯誤的,因爲你不改變你的數組的內容,而只是改變本地變量k。因此,在您的示例中,display中的打印語句事實上不打印num2,但num1(如打印語句k指向與j相同的位置,它是num1的元素)。

0

這意味着「分配存儲在j作爲k值的值」,僅複製存儲在jk值聲明k = j;。它沒有對陣列做任何事情,只是指針k指向j指向的地址。分配和增量僅影響局部變量jk,沒有別的。

當你寫*k = *j;,它主要是指「指定地址j的內容,以解決k」,它不復制,並增加jk點他們的下一個數組元素。

+0

謝謝大家,我需要更多的參與,因爲我無法完全理解你的答案。謝謝。 – Justine