【发布时间】:2015-10-18 03:43:09
【问题描述】:
我想将三个结构的数组传递给一个函数,该函数对存储在结构数组中的三个数字进行排序,但不想更改实际值,因为数组是通过引用传递的,这就是我的问题,任何想法都接受谢谢:)
这是我的审查代码:
#include <stdio.h>
#define N 3
typedef struct
{
int digito;
} numbers;
void sort(numbers tabla[], int nro);
void enternums(numbers tabla[], int nro);
int main()
{
static numbers enter[N];
int i, j, tmp;
enternums(enter, N);
printf("Data before entering the function...\n\n");
for (i = 0 ; i < N ; i++)
{
printf("%d\n", enter[i].digito);
}
sort(enter, N);
printf("After entering data function....\n\n");
for (i = 0 ; i < N ; i++)
{
printf("%d\n", enter[i].digito);
}
return 0;
}
void enternums(numbers tabla[], int nro)
{
int i;
for (i = 0 ; i < nro ; i++)
{
printf("Enter a digit for the position %d: ", i);
scanf("%d", &tabla[i].digito);
}
}
void sort(numbers tabla[N], int nro)
{
int i, j, tmp;
for (i = 1 ; i < nro ; i++)
{
j = i;
tmp = tabla[i].digito;
while ((j > 0) && (tmp < tabla[j - 1].digito))
{
tabla[j].digito = tabla[j - 1].digito;
j--;
}
tabla[j].digito = tmp;
}
}
【问题讨论】:
-
你不需要把代码写得这么难读,你可以像我一样做。当然数组不是通过引用传递的。
-
我不太明白你真正想要什么,
scanf("%d", &tabla[i].digito);是你代码中的一个潜在错误,因为你不检查返回值,即scanf()的成功或失败。 -
您可以复制传递的数组并对副本进行排序
-
@bpgeck 如果你返回数组,这将是有意义的,否则它只是一个故意的内存泄漏!
-
@iharob 他不必做深拷贝。他可以将其存储在堆栈中。
标签: c arrays function structure