前段时间我写过(复制/粘贴,说实话)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);<<<<
}
有人可以告诉我编译器如何将数组理解为整数加法作为第一个参数?
答案 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)
。