#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void insertion_sort(int arr[]);
void insertion_sort(int arr[]) {
int hold;
int key;
for (int i = 2; i < 7; i++) {
key = arr[i];
hold = i- 1;
while (hold >= 0 && arr[hold] > key) {
arr[hold + 1] = arr[hold];
hold--;
}
arr[hold + 1] = key;
}
}
int main() {
int arr[] = {3,4,5,6,7,1,4};
insertion_sort(arr);
for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
printf("%d", arr[i]);
}
return 0;
}
似乎我不能使用[sizeof(arr)/ sizeof(int)]来获取insertion_sort中数组的长度。所以我用了整数。是什么原因以及操作数组作为函数参数的正确方法是什么?
答案 0 :(得分:2)
您无法在函数内获取数组大小。
您要做的是将大小作为另一个参数传递。
void insertion_sort(int arr[], int size)
答案 1 :(得分:2)
您无法从函数内部找到数组的大小。在调用中,数组衰减成指向第一个元素的指针,显然指针没有根据元素数量指出它指向多少数据的概念。
这就是C的工作方式。
您应该添加第二个参数来指示长度,并使其具有类型size_t
,因为该类型表示我们正在讨论大小。
例如,请参阅标准库的qsort()
函数:
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
基本上base
和nmemb
描述了一个数组。