教育目的で独自のクイックソートを書きたいときに来ます。これは私が得たものです:
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が、移植性はありません。