在StackOverflow上的第一篇文章。我应该创建一个函数:
int sumsort(int *a, int *b, int *c)此函数应将a、b和c指向的内存位置中的3个值按升序排列,并返回内存位置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函数必须返回sum,并且实际的排序也必须在sumsort函数中进行。
我尝试在main中创建一个新的数组变量,并在调用sumsort函数后将其赋值为sorted[],但是因为它超出了作用域,所以不起作用?
发布于 2019-03-01 13:57:08
您不能从main访问您的sorted变量,这是正确的。但你不需要这么做。该函数的要点是修改其参数所指向的值。
例如:
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;
}
}发布于 2019-03-01 15:56:24
您可以在main外部将sorted[]声明为全局变量:
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你可能需要检查你的排序逻辑。
希望这能有所帮助:)
https://stackoverflow.com/questions/54938644
复制相似问题