【问题标题】:Print a void function in C language用C语言打印一个void函数
【发布时间】:2016-06-17 19:14:05
【问题描述】:

我想打印 shell 对包含 1000 个元素的数组进行排序的结果。该函数的类型为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;
}

【问题讨论】:

  • 见鬼,“打印函数”是什么意思?
  • 不清楚你在问什么。你只想打印出排序的元素?为什么不只是 for (i=0; i&lt;1000; i++) { printf("%d\n", my_array[i]); },类似于填充元素的方式?
  • 我认为他们的意思是他们要打印返回值,但是没有返回值,这让他们感到困惑。
  • @Kusalananda 如果实践不佳,它在语法上是正确的。
  • @WeatherVane 没有块,算法是错误的,不是吗?这三个语句都属于它。这是一个标准的交换。

标签: c function return-value void


【解决方案1】:

在 C 中,数组将“作为引用”(作为指针,对于更高级的 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;
}

【讨论】:

  • 请注意:在C中没有“通过引用传递”这样的东西。在C 中,数组作为指向其第一个元素的指针 传递。指针按值传递,但数组没有被复制,这允许被调用函数修改其内容。
  • 指针不是引用!而且你不是通过指针传递一个数组(至少不是作为数组),而是一个指向第一个元素的指针。
  • 当然,当然。但是说“通过引用传递”对于初学者来说要清楚得多(假设他还没有学过指针和更复杂的主题)
  • 嗯。从长远来看,使用错误的术语来握住初学者的手并不能帮助他们。
【解决方案2】:

把最里面的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]);
    }

【讨论】:

    猜你喜欢
    • 2023-02-10
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多