voidポインタを使用してCで基本的なキュー構造を実装しました。手順は以下の通りである:構造体を初期化void *を使用したCのキュー実装 - 良いか悪いのか?
- - Iを格納する変数へのポインタを渡す、キューは、次にグラブ - Iは、キュー
- プッシュに格納する変数の型のサイズを設定します自身のコピー
- front - 構造体は、先頭の要素にvoid *を返します。私はちょうどポインタをつかむかもしれません、または
memcpy()
それはローカルコピーを持っています。
構造体自体は、次のようになります
struct queue
{
void* start; //pointer to the beginning of queue
void* end; //-||- to the end
size_t memsize; //size of allocated memory, in bytes
size_t varsize; //size of a single variable, in bytes
void* initial_pointer; //position of the start pointer before pop() operations
};
開始と終了は、現在割り当てられたメモリブロック内のいくつかの場所を指すだけで無効ポインタです。キュー上の要素を押すと、終了ポインタをvarsize
だけインクリメントします。私がpop()した場合、私はちょうどvarsize
によって終了ポインタを減らします。
私はここに機能コードを載せるべきではないと思いますが、100行以上あります。
質問:これは良いか悪い練習と考えられますか?何故なの)?
注:Cのキューには他にも多くのオプションがあることを知っていますが、私はこのキューの品質について質問しています。
EDITは:実装がここにあります: ます。http:あなたがタイプとサイズがわからない場合は、// 89.70.149.19の/stuff/queue.txt
メモリサイズにはsize_tを使用してください –
私は 'void * 'を使って汎用コードを書くのが良いと思います。 –
@RanEldanありがとうございます。ここで訂正しました。 – szczurcio