关于一维数组地址传入函数但是值并没有改变的问题

今天遇到一个问题,很是头疼。描述如下:
写快速排序算法时,最后调用了函数

void QuickSort(int *R)
{
    int length;
    length = sizeof(R) / sizeof(int);
    QSort(R, 1, length-1);     //对R[ 1 ] 到R[ length-1 ] 之间的元素进行快速排序
}

其中参数中的R是一维数组的首元素地址,即R[ 10 ]中的R。然后运行之后,输出发现R并没有被排序。但是如果把QuickSort()函数中的内容放在主程序中运行,又能够排序了。请问一下大家,这是个什么情况。

length = sizeof(R) / sizeof(int);
这行是错的,在函数里的sizeof(R)实际是得到指针的长度,不是数组的长度,你应该将数组的长度作为参数传递进来

void QuickSort(int *R,int n)
{
    QSort(R, 1, n-1);    
}