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

または、へのポインタを作成して、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**ポインターを渡して、それが指すものを変更し、関数が戻ったときに変更を確認する場合、ポインターは値によって渡されるため、つまり関数にコピーされるため、を渡す必要があります。したがって、内部を指すものを変更しても、関数が戻ったときにその変更は表示されません。

于 2012-11-02T09:43:48.993 に答える
0

どんな操作をしているのか、詳しく説明する必要があると思います。quは変数ですか、それともポインターですか?

quがポインターの場合、アドレスではなくポインターだけを渡す必要があります。ただし、関数内のポインター自体を変更する場合は、関数パラメーターをであるQueue** que必要があり、quのアドレスを関数に渡す必要があります。これをCの単純なルールとして定義します。関数内の変数を変更する場合は、変数のアドレスを関数に渡す必要があります。

于 2012-11-02T11:40:15.830 に答える