2012-10-10 38 views
0

可能重複:
C: change pointer passed by value改變數組指針的值當傳遞到功能

我有同時接收的陣列,且所述陣列的特定實例的功能。我嘗試通過訪問其中一個成員「color」來更改數組的特定實例,但實際上並沒有改變它,這可以通過調試(在主程序中運行函數之後檢查顏色的值)來看到。

我希望有人可以幫助我訪問此會員並進行更改。基本上我需要我指定的數組實例,如果沒有別的,我希望有一個更簡單的方法來完成我想要做的事情。

這裏的結構:

typedef struct adjEdge{ 
     int vertex; 
     struct adjEdge *next; 
} adjEdge; 


typedef struct vertex{ 
     int sink; 
     int source; 
     int color;                //0 will be white, 1 will be grey, 5 will be black 
     int number; 
     adjEdge *nextVertex; 
} vertex; 

這裏是功能:

void walk(vertex *vertexArray, vertex *v, int source, maxPairing *head) 
{ 
     int i; 
     adjEdge *traverse; 
     int moveVertex; 
     int sink; 
     int correctedNumber = v->number; 
     traverse = vertexArray[v->number-1].nextVertex; 
     if(v->color != 5 && v->sink == 5) 
     { 
       sink = v->number; 
       v->color = 5; 
       addMaxPair(head, source, sink); 
     } 
     else 
     { 
       walk(vertexArray, vertexArray[traverse->vertex-1], source, head); 
     } 



} 

尤其v.color需要遞歸後,後來改爲5,這樣,如果條件阻止它。

+1

您使用更新的代碼時遇到了什麼問題?順便說一下,recusrive調用應該改爲'walk(vertexArray,&vertexArray [traverse-> vertex-1],source,head);' – Naveen

+0

您已經照顧好了這個意見 – ZAX

回答

1

您正在參照拷貝所以無論在函數內部改變什麼都不會反映到外面。您需要接受v作爲vertex*

+0

這是有道理的。然而,我正在努力將它作爲一個指針傳遞......我已經適當地改變了我的函數定義,但它表示我沒有將它作爲指針傳遞。我將更新我的代碼 – ZAX

+0

已應用編輯 – ZAX

+1

@ZAX您不應編輯問題中的代碼,因爲它會導致答案無法理解。 –