我想打印一个带有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;
}
答案 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]);
}