-1

挿入ソートを次のように実装します。

void insertion_sort(int * list, int len ) {
int i, j;
for(j=1; j<len; j++) {
  int   key = list[j];
  i =   j - 1;
  while(i >= 0 && list[i] > key) {
    list[i + 1] = list[i];
    i   = i - 1;
  }
  list[i + 1]   = key;
  }
}

この関数を次のように呼び出すと:

int list[] = {5, 6, 4, 3, 1, 2};
insertion_sort(list, sizeof(list)/sizeof(list[0]));

それは正常に動作します。しかし、リストを次のように宣言すると:

int * list = {5, 6, 4, 3, 1, 2};

失敗します。ポインターの扱い方に問題があることは承知していますが、詳しく教えてください。ありがとう!

4

2 に答える 2

4

問題はありませんsizeof。パラメータのサイズをバイト単位で示します。最初のパラメータは配列であるため、要素の数に要素のサイズを掛けたものになり、2番目のパラメータはポインタであるため、次のサイズになります。ポインタ...

于 2013-01-05T11:13:11.897 に答える
3

一つにはsizeof(list)/sizeof(list[0])、もはや配列のサイズに評価されません。

于 2013-01-05T11:12:58.830 に答える