teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

訂正

2018/12/08 11:45

投稿

nullpon
nullpon

スコア5739

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  ①比較関数(compare)の実際の呼び出しはqsort内部で行われます。このとき、引数として比較する配列の要素が渡されます。
2
2
 
3
- ②事前にどんな型の配列が渡されるかわからないため、qsortの内部では配列の要素はvoid *となっています。配列を各要素に分割するには、要素の型(構造体)を知らなくても、要素の個数とサイズがわかれば十分です。
3
+ ②事前にどんな型の配列が渡されるかわからないため、qsortの内部では配列の要素はvoid *となっています。配列を各要素に分割するには、要素の型(構造体)を知らなくても、要素の個数とサイズ(第2,3引数)がわかれば十分です。
4
4
  よって、比較関数(compare)では、要素を比較する前に元の型(構造体)にキャストし直す必要があります。
5
5
 
6
6
  ③比較関数(compare)は、qsort内部で配列の要素を比較するために何度も呼び出されます。よって、常に0になることはありません。

1

訂正

2018/12/08 11:45

投稿

nullpon
nullpon

スコア5739

answer CHANGED
@@ -1,4 +1,4 @@
1
- ①比較関数(compare)の実際の呼び出しはqsort内部で行われます。このとき、引数として比較する配列の要素のポインタが渡されます。
1
+ ①比較関数(compare)の実際の呼び出しはqsort内部で行われます。このとき、引数として比較する配列の要素が渡されます。
2
2
 
3
3
  ②事前にどんな型の配列が渡されるかわからないため、qsortの内部では配列の要素はvoid *となっています。配列を各要素に分割するには、要素の型(構造体)を知らなくても、要素の個数とサイズがわかれば十分です。
4
4
  よって、比較関数(compare)では、要素を比較する前に元の型(構造体)にキャストし直す必要があります。