奇怪的功能参数 - 工作ANSI-C Quicksort实现 - 需要解释

时间:2017-01-23 23:14:23

标签: parameters ansi-c

前段时间我写过(复制/粘贴,说实话)QuickSort算法的ANSI-C实现。今天我想了解它...而且我无法知道标记线如何不会出错。

“rozmiar”当然意味着“大小”,它来自波兰语,我在当前设备上没有Notepad ++

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

有人可以告诉我编译器如何将数组理解为整数加法作为第一个参数?

2 个答案:

答案 0 :(得分:1)

C中的数组基本上是指向该类型的指针(它有点复杂,但这个解释对于这个例子来说已经足够了) - 所以int tab[]基本上与int* tab非常相似 - 和整数+指针(以任何顺序)导致指针在地址 n (其中 n 是所谓的整数)指针之后的sizeof(type)元素 - 所以你在第一个参数的 n 位置开始用数组调用你的函数 - 这完全没问题。

答案 1 :(得分:0)

假设你有一个类似的数组,

int a[MAXIMUM] // MAXIMUM is acc. to your convenience ;

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

这就是为什么当你传递数组作为参数时(但在场景后面,你是传递指针)。

当你致电fun(a)时,那时你的整个数组都没有被复制,只有指针&#39; a&#39;正在被传递到函数&#39; fun&#39;作为参数。

其余只是数组索引。我希望你必须知道a[i] == *(a+i)