2

教育目的で独自のクイックソートを書きたいときに来ます。これは私が得たものです:

qsort(void* array, int count, int size, int(*compare)(const void*, const void*));

そして、配列の各要素のサイズと、配列の最初の要素へのポインタがあります。その配列の個々の要素を取得するにはどうすればよいですか?

4

3 に答える 3

6

サイズがsizeof演算子で生成された場合、それはsizeof(char)(定義により 1 です) の倍数です。したがって、 を にキャストvoid*し、一度に「文字」をchar*移動します。size

(((char*)array) + i*size)
于 2013-01-02T09:40:21.907 に答える
4

char *通常、ポインタを使用してアドレス演算を行います。たとえば、次の要素iにアクセスしarrayます。

char * array_ptr = (char *)array + i * size;
于 2013-01-02T09:40:09.503 に答える
4

簡単に、キャストしchar*てポインター演算を行います。

char *carray = (char*)array;
char *pointer_to_n = carray + n * size;

ところで、GCC などの一部のコンパイラには、ポインターへのvoidポインターであるかのようにポインター演算を実行できる拡張機能がありますcharが、移植性はありません。

于 2013-01-02T09:41:06.277 に答える