2013-02-19 34 views
0

您可以告訴我在函數中的指針之間進行相等時出現什麼問題。讓我們來看看這個例子:函數中的指針之間的相等性C++

void fun(int *array1) 
{ 
    int array2[5]; 
    for(int i=0;i<5;i++) 
    { 
     array2[i]=3; 
    } 
    array1=array2; 
} 


int main(){ 
    int x[5]; int n=5; 
    for(int i=0;i<5;i++){ 
    x[i]=i; // --------> x[i]=i; 
    } 

    fun(x); //--------> x[i]=3 

    for(int i=0;i<5;i++){ 
    cout<< x[i]<<" "; //-------> x[i]=i?????????? I expected x[i]=3; 
    } 

    return 0; 
} 
+3

你不能像這樣分配數組(你正在做的是將array1指向一個臨時數組;它不會影響x)。只需在fun的循環中使用array1(我將大小傳遞給函數,而不是硬編碼,即5)。 – 2013-02-19 00:50:22

+0

@Peter Huene爲什麼不寫答案? – qPCR4vir 2013-02-19 00:53:14

+0

呃,懶惰:)另外,我喜歡給別人簡單點。 – 2013-02-19 00:53:41

回答

3
void fun(int *array1) 
{ 
    int array2[5]; 
    for(int i=0;i<5;i++) 
    { 
     array2[i]=3; 
    } 
    array1=array2; // **HERE** 
} 

當這個函數返回時,array2不再存在。因此,即使這樣確實將array1的值返回給調用者,調用者也只需要一個指向不再存在的數組的指針。

當然,它甚至沒有這樣做。 array1=array2;設置array1變量指向array2。但它們都是局部變量,所以這對調用者無影響。

也許你想:

memcpy(array1, array2, sizeof(array2)); 

但是,這是C++,你應該用一個合理的集裝箱像std::array

2

您創建一個新的數組與你的樂趣功能我認爲INT [5]你打算做:

/** 
    * not every array is 5 items long, thus it is unsafe 
    */ 

void fun(int *array1) 
{ 
    int* array2 = array1; 
    for(int i=0;i<5;i++) 
    { 
     array2[i]=3; 
    } 
} 

現在INT *數組2點,你在主函數中調用數組

+0

非常好! : - ) – 0x499602D2 2013-02-19 01:11:41