我正在进行插入排序,而main()中的数组似乎只是部分传递给sort()。下面的代码段显示main()中的test
的值为{2, 1, 3, 1, 2}
,但sort()中的arr
的值为{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);
}
答案 0 :(得分:10)
成语sizeof(arr)/sizeof(int)
仅适用于静态分配的数组,并且仅适用于定义它们的范围。
换句话说,您可以将它用于以下数组:
int foo[32];
......在他们定义的范围内。但不是在其他地方,而不是数组只是作为指针传递。对于其他情况,您需要传递指示数组中预期元素数量的额外信息。