关于StackOverflow的第一篇文章。我应该创建一个函数:
int sumsort(int *a, int *b, int *c)
此函数应在指向的存储位置中排列3个值 以a,b和c的升序排列,并且还返回 内存位置a,b和c。
这是我的职能:
int sumsort(int *a, int *b, int *c) {
int sum = *a + *b + *c;
int sorted[] = {*a, *b, *c};
for (int i = 0; i <= 2; i++) {
if (sorted[0] > sorted[1])
{
int temp = sorted[1];
sorted[1] = sorted[0];
sorted[0] = temp;
} // end if
if (sorted[1] > sorted[2])
{
int temp2 = sorted[2];
sorted[2] = sorted[1];
sorted[1] = temp2;
} // end if
} // end for
return sum;
} // end sumsort function
如何访问main中的sorted[]
数组?我需要按升序打印3个变量,但实际上不知道该怎么做,因为sumsort
函数必须返回总和,并且实际排序也必须在sumsort
函数中进行
我尝试在调用sorted[]
函数之后在main中创建一个新的数组变量并将其分配给sumsort
,但这不起作用,因为它超出了范围?
答案 0 :(得分:1)
您正确的说,您无法从sorted
访问main
变量。但是您不需要。该函数的要点是它会修改其参数所指向的值。
例如:
int main()
{
int x = 5, y = 1, z = 3;
int sum = sumsort(&x, &y, &y);
// now x == 1 , y == 3 , z == 5
}
这是可能的。在sumsort
内部,您无需创建新数组,而只需修改其参数所指向的值即可。
例如,如果您只需要对两个数字进行排序,这就是您要做的
void foo(int* a, int *b)
{
if (*a > *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
}
答案 1 :(得分:0)
您可以将sorted []声明为main之外的全局变量:
int sorted[3];
main()
{
int a=20, b=15, c=22, sum;
sum= sumsort(&a,&b,&c);
printf("%d",sum);
printf("%d", sorted[0]);
printf("%d", sorted[1]);
printf("%d", sorted[2]);
}
在您的函数中,您可以按如下所示使用它:
int sumsort(int *a, int *b, int *c) {
int sum = *a + *b + *c;
sorted[0] = *a;
sorted[1] = *b;
sorted[2] = *c;
for (int i = 0; i <= 2; i++) {
if (sorted[0] > sorted[1])
{
int temp = sorted[1];
sorted[1] = sorted[0];
sorted[0] = temp;
} // end if
if (sorted[1] > sorted[2])
{
int temp2 = sorted[2];
sorted[2] = sorted[1];
sorted[1] = temp2;
} // end if
} // end for
return sum;
} // end sumsort function
您可能必须检查排序逻辑。
希望这会有所帮助:)