なんでchar型なんでしょうか??
なぜここ(☆☆)で char型なのかが
よく・・いやさっぱりわかりません。
他の型ではだめなんでしょーか?
この関数自体は挿入ソートだとわ思われるんで
なんとなくこの☆☆(から以下三行あたりまで)
のところの動作の意味はわかるんですが なぜchar型でなくてはならないのかが。
知っている方いたら どうか教えてください。
typedef User* PUser;
typedef int (*CFT)(const void*, const void*);
void ssort(void* base, unsigned int n,
unsigned int sz, CFT cmp)
{
for (int i = 0; i < n - 1; i++)
for (int j = n - 1; i < j; j--) {
char* pj = (char*)base + j * sz; //←ここ☆☆
char* pj1 = pj - sz; //とここ☆☆
if (cmp(pj, pj1) < 0) {
for (int k = 0; k < sz; k++) {
char temp = pj[k];
pj[k] = pj1[k];
pj1[k] = temp;
}
}
}
/*
ssort関数の引数の関数ポインタで
利用される比較関数
*/
int cmp1(const void* p, const void* q)
{
return strcmp(PUser(p)->name, PUser(q)->name);
}
int cmp2(const void* p, const void* q)
{
return PUser(p)->dept - PUser(q)->dept;
}
補足
解約したらその月の代金を払わないでいいのですか?