2012-10-10 40 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您不应编辑问题中的代码,因为它会导致答案无法理解。 –