看下面代码有什么不同
- C/C++ code
//快速排序int partition(int a[],int p,int r){ int x = a[p]; int i = p; int j = r; while(1) { while (a[j] > x) --j; while (a[i] < x) ++i; if (i < j) { int t = a[i]; a[i] = a[j]; a[j] = t; } else return j; }}void quick(int a[],int p,int r){ if (p < r) { int q = partition(a,p,r); quick(a,p,q); quick(a,q + 1,r); }}void quicksort(int a[]){ quick(a,0,sizeof(a)/sizeof(int) - 1);}int a[] = {467,34,7,89,47,75,11,0};
quick(a,0,7);
和
quicksort(a);
有什么不同
[解决办法]
void quicksort(int a[])
{
quick(a,0,sizeof(a)/sizeof(int) - 1);
数组作为参数的时候会退化为指针, 所以这个函数相当于
void quicksort(int *a)
{
quick(a,0,sizeof(a)/sizeof(int) - 1);
所以, sizeof(a)就等于sizeof(int*),而不是想要的数组长度