今日、const識別子を使用しようとしましたが、const変数はまだ変更できることがわかり、混乱しています..
以下はコードです。compare(const void *a, const void *b) 関数で、 aが指している値を変更しようとしました。
#include <stdio.h>
#include <stdlib.h>
int values[] = {40, 10, 100, 90, 20, 25};
int compare (const void *a, const void*b)
{
*(int*)a=2;
/* Then the value that a points to will be changed! */
return ( *(int*)a - *(int*)b);
}
int main ()
{
int n;
qsort(values, 6, sizeof(int), compare);
for (n = 0; n < 6; n++)
printf("%d ", values[n]);
return 0;
}
次に、 a自体の値も変更しようとしました。
#include <stdio.h>
#include <stdlib.h>
int values[] = {40, 10, 100, 90, 20, 25};
int compare (const void *a, const void*b)
{
a=b;
return ( *(int*)a - *(int*)b);
}
int main ()
{
int n;
qsort(values, 6, sizeof(int), compare);
for (n = 0; n < 6; n++)
printf("%d ", values[n]);
return 0;
}
しかし、私はそれらの両方が機能することを発見しました.比較のパラメーターリストで const を使用する必要がある理由を誰かに説明してもらえますか?