教育目的で独自のクイックソートを書きたいときに来ます。これは私が得たものです:
qsort(void* array, int count, int size, int(*compare)(const void*, const void*));
そして、配列の各要素のサイズと、配列の最初の要素へのポインタがあります。その配列の個々の要素を取得するにはどうすればよいですか?
教育目的で独自のクイックソートを書きたいときに来ます。これは私が得たものです:
qsort(void* array, int count, int size, int(*compare)(const void*, const void*));
そして、配列の各要素のサイズと、配列の最初の要素へのポインタがあります。その配列の個々の要素を取得するにはどうすればよいですか?
サイズがsizeof
演算子で生成された場合、それはsizeof(char)
(定義により 1 です) の倍数です。したがって、 を にキャストvoid*
し、一度に「文字」をchar*
移動します。size
(((char*)array) + i*size)
char *
通常、ポインタを使用してアドレス演算を行います。たとえば、次の要素i
にアクセスしarray
ます。
char * array_ptr = (char *)array + i * size;
簡単に、キャストしchar*
てポインター演算を行います。
char *carray = (char*)array;
char *pointer_to_n = carray + n * size;
ところで、GCC などの一部のコンパイラには、ポインターへのvoid
ポインターであるかのようにポインター演算を実行できる拡張機能がありますchar
が、移植性はありません。