5

私は挿入ソートに取り組んでいますが、main()の配列はsort()に部分的にしか渡されていないようです。以下のスニペットはtest、main()には値があります{2, 1, 3, 1, 2}arr、sort()には値があることを示しています{2, 1}。何が起きてる?

 #include <stdio.h>

 int sort(int* arr) {
      int i = 0;
      int j, key;
      int count = 0;

      printf("Inside sort(): ");
      for (j = 0; j < sizeof(arr)/sizeof(int); ++j)
           printf("%d ", arr[j]);
      printf("\n");

      for (j = 1; i < sizeof(arr)/sizeof(int); ++j) {
           key = arr[j];
           i = j - 1;
           while (i >= 0 && arr[i] > key) {
                arr[i + 1] = arr[i];
                --i;
                ++count;
           }
           arr[i + 1] = key;
      }
      return count;
 }

 int main(int argc, char* argv) {
      int test[] = {2, 1, 3, 1, 2};
      int i = 0;
      printf("Inside main(): ");
      for (i = 0; i < sizeof(test)/sizeof(int); ++i)
           printf("%d ", test[i]);
      printf("\n");
      int count = sort(test);
 }
4

1 に答える 1

10

このイディオムsizeof(arr)/sizeof(int)は、静的に割り当てられた配列に対してのみ機能し、それらを定義するスコープ内でのみ機能します。

つまり、次のような配列に使用できます。

int foo[32];

...それらが定義されている範囲内。しかし、他の場所ではなく、単にポインタとして渡される配列ではありません。その他の場合は、配列内の要素の予想数を示す追加情報を渡す必要があります。

于 2012-07-04T23:23:58.327 に答える