Parameters 奇怪的函数参数-正在工作的ANSI-C快速排序实现-需要解释

Parameters 奇怪的函数参数-正在工作的ANSI-C快速排序实现-需要解释,parameters,ansi-c,Parameters,Ansi C,老实说,我在不久前写了一个ANSI-C快速排序算法的实现。今天我想了解它。。。我无法理解标记的行如何不给出错误 rozmiar的意思当然是大小,它来自波兰语,我在当前设备上没有记事本+ 有人能解释一下编译器是如何理解数组到整数的加法作为第一个参数的吗?C中的数组基本上是指向该类型的指针,它有点复杂,但是这个解释对于这个例子来说已经足够了-所以int tab[]基本上,它的处理方式与int*tab非常相似,整数+指针的任何顺序都会产生一个地址为n的指针,其中n表示指针后面的sizeoftype整数

老实说,我在不久前写了一个ANSI-C快速排序算法的实现。今天我想了解它。。。我无法理解标记的行如何不给出错误

rozmiar的意思当然是大小,它来自波兰语,我在当前设备上没有记事本+


有人能解释一下编译器是如何理解数组到整数的加法作为第一个参数的吗?

C中的数组基本上是指向该类型的指针,它有点复杂,但是这个解释对于这个例子来说已经足够了-所以int tab[]基本上,它的处理方式与int*tab非常相似,整数+指针的任何顺序都会产生一个地址为n的指针,其中n表示指针后面的sizeoftype整数元素,因此您使用从第n个位置开始的数组作为第一个参数来调用函数,这是完全正确的

int a[MAXIMUM]//最大值根据您的方便而定

它分配一个最大大小的连续空间,并创建一个指向该连续空间的int*a

这就是原因,当你们传递一个数组作为参数,但在幕后,你们传递的是指针

当您调用funa时,此时不会复制整个数组,但只会将指针“a”作为参数传递给函数“fun”

rest只是数组索引。我希望你一定知道a[I]==*a+I

void QuickSort (int tab[], int rozmiar)
{
    int i, j, p, t;
    if (rozmiar < 2) return;

    p = tab[rozmiar / 2];

    for (i = 0, j = rozmiar - 1;; i++, j--) 
    {
        while (tab[i] < p)
            i++;
        while (p < tab[j])
            j--;
        if (i >= j)
            break;
        t = tab[i];
        tab[i] = tab[j];
        tab[j] = t;
    }
    QuickSort(tab, i);
    >>>>QuickSort(tab + i, rozmiar - i);<<<<
}