-1

我将插入排序实现为:

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};

它失败。我知道我如何使用指针存在一些问题,但你能详细说明一下吗?谢谢!

4

2 回答 2

4

没有问题,sizeof以字节为单位为您提供参数的大小-第一个是数组,因此它为您提供元素数量乘以元素大小,第二个是指针,因此它为您提供指针...

于 2013-01-05T11:13:11.897 回答
3

一方面,sizeof(list)/sizeof(list[0])不再评估数组的大小。

于 2013-01-05T11:12:58.830 回答