【问题标题】:How can I access an array created in another function in main without returning it?如何访问在 main 的另一个函数中创建的数组而不返回它?
【发布时间】:2019-03-01 05:48:48
【问题描述】:

关于 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 函数中进行。

在调用sumsort 函数后,我尝试在main 中创建一个新的数组变量并为其分配sorted[],但这不起作用,因为它超出了范围?

【问题讨论】:

  • 你不能更改sumsort的签名吗?你不能给它第四个参数吗?
  • 没错
  • 创建一个指针数组并根据间接值对该数组进行排序
  • 你的任务是交换*a*b*c的内容。不要像你那样创建一个按顺序引用它们的新结构,而是简单地交换它们。

标签: c arrays sorting pointers


【解决方案1】:

您是正确的,您无法从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;
    }
}

【讨论】:

【解决方案2】:

您可以将 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

您可能需要检查您的排序逻辑。

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多