>>768
> aの値とbの値は配列が4, 2, 3, 6, 3, 2, 1, 3, 5, 7であれば
> a=4
> b=2で

違います。

>>750の続きだと思うけど、
a と b には、呼び元が
int compare_int(const void *a, const void *b)
を呼ぶときに第一第二引数それぞれに指定した「アドレス値」が入ります。

compare_int();は、
a, b それぞれのアドレスにあるデータを int値と判断して引き算し、
その結果を返すだけです。

compare_int();は、配列とか意識していません。
指示されたことをやっているだけです。