如何将队列传递给c中的另一个函数

时间:2012-11-02 09:36:10

标签: c

我试图将一个队列传递给c中的另一个函数,以便对它进行一些操作,我试图发送它的引用并在函数参数中放入一个指针,但这没有意义! / p>

这就是我的所作所为:

这是来电者:

G = my_job(&qu, inducing_cell, target_cell, G, vertices_number, cells_number);

这是功能:

graph* my_job(Queue *qu, Position inducing_cell, Position target_cell, graph* G, unsigned long vertices_number, unsigned long cells_number) {}

2 个答案:

答案 0 :(得分:1)

您需要将变量的地址传递给Queue结构。

如下:

 Queue q; //create a queue instance
 G =  my_job(&q /*Pass in address to Q*/, inducing_cell, target_cell, G, vertices_number, cells_number);

或者您可以创建指向Queue的指针并将其传递到:

 Queue* q = malloc(sizeof(Queue)); //Make sure you have allocated the pointer (unless my_job allocates it inside)
 G = my_job(q /*Pass in pointer (pointer is copied)*/, inducing_cell, target_cell, G, vertices_number, cells_number);
 //Do stuff with q
 free(q); // Free the memory. 

如果你想传入一个指针来改变它指向的内容并在函数返回时看到更改,你需要传入一个Queue**,因为指针是按值传递的,即它被复制了进入功能。因此,如果您更改它指向的内部,则在函数返回时不会看到该更改。

答案 1 :(得分:0)

我认为你需要详细说明你正在做什么样的操作。是变量还是指针?

如果qu是指针,则只需要传递指针,而不是传递指针的地址。但是,如果要在函数中修改指针本身,则函数参数必须为Queue** que,并且需要将qu的地址传递给函数。将此定义为C中的简单规则;如果要修改函数中的变量,则需要将变量的地址传递给函数。