1

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

这就是我所做的:

这是来电者:

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) {}
4

2 回答 2

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);

或者您可以创建一个指向 a 的指针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. 

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

于 2012-11-02T09:43:48.993 回答
0

我认为您需要详细说明您正在执行的操作类型。qu 是变量还是指针?

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

于 2012-11-02T11:40:15.830 回答