【发布时间】:2012-07-05 09:13:45
【问题描述】:
我正在处理插入排序,而我在 main() 中的数组似乎只是部分传递给了 sort()。下面的 sn-p 显示 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);
}
【问题讨论】:
-
从中吸取的教训是将数组的大小传递给您正在调用的函数。不要试图让函数确定数组的大小。通常,该函数无法确定大小。在一些选定的特殊情况下,这是可能的(例如,指针数组的末尾有一个空指针)。
main()的参数列表是int main(int argc, char **argv)并非偶然,尽管这是可以使用空指针来确定参数列表结尾的特殊情况之一。
标签: c algorithm insertion-sort