我将插入排序实现为:
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};
失败了。我知道我如何玩指针有一些问题,但你能详细说明吗?谢谢!
答案 0 :(得分:4)
没有问题,sizeof
以字节为单位给出参数的大小 - 第一个是数组,因此它给出了元素的数量乘以元素的大小,第二个是指针,所以它给你指针的大小......
答案 1 :(得分:3)
首先,sizeof(list)/sizeof(list[0])
不再评估数组的大小。