c - 将数组传递给具有奇数格式的函数 - "v+last+1"

标签 c arrays function argument-passing

编程实践中,关于快速排序的章节中,有一些 C 代码遍历了快速排序的基本算法(我已经将代码编译成一个打印任意数组的程序排序前和排序后的值):

#include<stdio.h>
#include<stdlib.h>

void swap(int v[], int i, int j)
{
    int temp;

    temp = v[i];
    v[i] = v[j];
    v[j] = temp;
}

void quicksort (int v[], int n)
{
    int i, last;
    if (n <= 1)
        return;
    swap(v, 0, rand() % n);
    last = 0;
    for (i = 1; i < n; i++) 
    {
        if (v[i] < v[0]) 
        {
            swap (v, ++last, i);
        }
    }
    swap(v, 0, last);
    quicksort(v, last);
    quicksort(v+last+1, n-last-1);
}

void printIntegerArray(int arrayInput[], int arraySize)
{
    for (int i = 0; i < arraySize; i++)
    {
        printf("%d ", arrayInput[i]);
    }
    printf("\n");
}

int main(void)
{
    int array[5] = {7, 10, 14, 12, 4};
    int arraySize = sizeof(array) / sizeof(array[0]);
    printf("Before sorting: ");
    printIntegerArray(array, arraySize);
    quicksort(array, arraySize); 

    printf("After sorting: ");
    printIntegerArray(array, arraySize);
}

除了第二个递归调用,我什么都懂:

quicksort(v+last+1, n-last-1);

“v+last+1”是做什么的?我不会假设 C 在运行时更改数组的大小,所以它只是说输入是“一个数组,从 V[last+1] 开始”还是别的什么?一如既往,抱歉,如果我在另一篇文章中错过了这个。我尝试搜索我的问题的几个变体版本。

最佳答案

is it simply saying that the input is 'an array, starting from V[last+1]' or is it something else?

是指针运算,你的猜测基本正确,只不过传递的确实是一个指针。

当作为函数参数传递时,数组总是自动转换为指向第一个元素的指针。因此,当 v 被传递时,它实际上是指向传递的第一个元素的指针。而v+last+1是指向v第一个元素之后的last+1个元素的指针。

关于c - 将数组传递给具有奇数格式的函数 - "v+last+1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22141124/

相关文章:

c - 参数如何有类型但没有名称?

python - Skimage图路由到多个目的地

java - 当我单击两个重叠的 ImageView 时,其中一个给了我反馈,另一个则没有

c - 从函数返回字符串(字符数组、字符指针等)

ios - 如何在 Swift 4 的 if let 语句中返回一个值?

c++ - 有人可以推荐一本关于可移植 C/C++ 代码开发的书吗?

c++ - 需要从格式化字符串移动到二进制缓冲区

使用系统调用将一个文件的内容复制到另一个文件

java - Java中char数组的和

c - typedef 字符数组作为函数参数