【发布时间】:2012-09-30 10:37:26
【问题描述】:
我有一个 typedef 结构数组。
声明如下:
vertex vertexArray[numberVertices];
然后我的主代码中有这个:
for(i=0;i<numberVertices;i++)
{
if(vertexArray[i].source == 5)
{
source = vertexArray[i].number;
walk(vertexArray, vertexArray[i], source, headMaxPairList );
}
}
有希望地进行步行:
void walk(vertex *vertexArray, vertex v, int source, maxPairing *head)
{
int i;
adjEdge *traverse;
int moveVertex;
int sink;
moveVertex = vertexArray[v.number-1].number;
if(vertexArray[moveVertex-1].color != 5 && vertexArray[moveVertex-1].sink == 5)
{
sink = vertexArray[moveVertex-1].number;
vertexArray[moveVertex-1].color = 5;
addMaxPair(head, source, sink);
}
else
{
walk(vertexArray, vertexArray[moveVertex-1], source, head);
}
}
但是,我在函数上遇到了段错误:
in walk (vertexArray=Cannot access memory at address 0x7fffff3fefe8
我相信这与我传递 vertexArray 的方式有关。
据我了解,数组实际上是指针,因此 vertex *vertexArray 然后单个成员只是一个顶点,而不是指针,因此 vertex v。
如果有人能帮助我正确通过,我将不胜感激。
旁注,如果有人能判断我的步行是否可以正常工作,那就太好了!
【问题讨论】:
-
数组实际上并不是指针。它们有一些相似之处,但两者不可互换。有些人称它们为 constant 指针,但我认为这是用词不当并会导致混淆。数组就是数组。
-
@DavidTitarenco 话虽如此,有没有办法在 C 中传递像我这样的数组?
-
有无数资源概述了如何在 C(++) 中传递数组。例如,请参阅stackoverflow.com/questions/2559896/how-are-arrays-passed
-
@DavidTitarenco 是的,我现在明白了。然而,事实证明,无论出于何种原因,我在 walk 中使用的递归都因再次传递数组而失败。通过注释掉它的递归行。那么如何处理递归的建议?
标签: c arrays function parameter-passing