读书人

看下面代码有什么不同,该怎么解决

发布时间: 2012-03-11 18:15:39 作者: rapoo

看下面代码有什么不同

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*),而不是想要的数组长度

读书人网 >C++

热点推荐