在&符号之前我需要放什么?

时间:2014-03-07 05:31:22

标签: c pointers arguments ampersand

为extractMin的参数行获取以下错误:

randmst.c:129:错误:预期';',','或')'在'&'标记之前

如果我没有粘贴足够的错误代码,请告诉我。

//the heap functions

//based on p. 163 of clrs
VertexPointer
extractMin(VertexPointer *heap, int &heap_size){
    VertexPointer max = heap[0];
    (*heap[0]).key = 100;
    heap_size = heap_size - 1;
    minHeapify(heap, heap_size, 1);
    return max;
}

2 个答案:

答案 0 :(得分:2)

您无法在extractMin(VertexPointer *heap, int &heap_size)中执行此操作C - 将其更改为extractMin(VertexPointer *heap, int *heap_size)

C中没有Pass-by-reference。所以你应该有这样的东西:

extractMin(VertexPointer *heap, int *heap_size){
    VertexPointer max = heap[0];
    (*heap[0]).key = 100;
    *heap_size = *heap_size - 1;
    minHeapify(heap, *heap_size, 1); 
    return max;
}

&用于获取变量的地址,因此在调用函数时,您应该这样调用它:

extractMin(someAddress_to_heap, someAddress_to_heap_size)

答案 1 :(得分:0)

通过引用传递在C中不起作用,通过引用传递和传递地址存在差异。 C ++支持传递refrence但C不支持。 将您的代码更改为

VertexPointer
extractMin(VertexPointer *heap, int *heap_size)