用C语言打印void函数

时间:2016-06-17 19:14:05

标签: c function return-value void

我想打印一个带有1000个元素的数组shell排序结果。该函数的类型为void,因此我想知道如何检索值"返回"从函数(没有真正返回,实际上是结果)。这是我的代码,直到现在:

#include "stdafx.h"
#include <stdlib.h>
void shellsort(int v[], int n)
{
    int gap, i, j, temp;
    for (gap = n / 2; gap > 0; gap /= 2)
        for (i = gap; i < n; i++)
            for (j = i - gap; j >= 0 && v[j] > v[j + gap]; j -= gap)
                temp = v[j];
    v[j] = v[j + gap];
    v[j + gap] = temp;


}
int main()
{

    int i;
    int my_array[1000];

    for (i = 0; i < 1000; i++) {
        my_array[i] = rand();
    }

    shellsort(my_array, 1000);


    return 0;
}

2 个答案:

答案 0 :(得分:2)

在C中,数组传递&#34;作为参考&#34; (作为指针,对于更高级的C程序员而言)的功能。这意味着函数对数组所做的任何更改都会影响调用函数中的数组。

这意味着,my_array(在调用函数之后)现在保持排序数组(因为函数修改了它)。

因此,您可以打印my_array,而不是返回值,而不是:

int main()
{

    int i;
    int my_array[1000];

    for (i = 0; i < 1000; i++) {
        my_array[i] = rand();
    }

    shellsort(my_array, 1000);

    for (i = 0; i < 1000; i++) {
        printf("%d\n", my_array[i]);
    }

    return 0;
}

答案 1 :(得分:0)

将最内置的forloop更改为

for (j = i - gap; j >= 0 && v[j] > v[j + gap]; j -= gap)
   {  
    /* You need {} for a block of statements
     * if you miss the {}, the forloop will have only the next immediate
     * statement under its jurisdiction
     */
    temp = v[j];
    v[j] = v[j + gap];
    v[j + gap] = temp;
   }

void类型的函数不会返回任何内容。但是,因为您将排序后的数组放回main

因此,您可以使用简单的for-loop类似

打印数组
for (i = 0; i < 1000; i++) {
        printf("%d\n", my_array[i]);
    }
相关问题