c - 如何在 C 中返回数组中最大的两个数?

标签 c arrays pointers return function-pointers

到目前为止,我已经有了这个。我试图在数组中找到两个最大的数字并返回它们。我在网上查找了很多资源,其中大多数都说“按引用调用”是可行的方法。但我不知道如何让它与我的程序一起工作。比如我在网上看到这个例子:

void Calculate(int x, int y, int* prod, int* quot)
{
    *prod = x*y;
    *quot = x/y;
}

int x = 10,y = 2, prod, quot;
Calculate(x, y, &prod, &quot)

上述程序实际上是如何“返回”的?如何将返回值打印到控制台?

#include "stdio.h"


void largest_two( int numbers[], int len, int *largest, int *next_largest){


  int i, temp;

  *largest = numbers[0];
  *next_largest = numbers[1];

  if(*largest < *next_largest){
    temp = *next_largest;
    *largest = *next_largest;
    *next_largest = temp;
  }

  for (i=0; i<sizeof(numbers); i++) {
    if(numbers[i]>= *largest){
      *largest = numbers[i];
      *next_largest = *largest;
    }
    else if ( numbers[i] > *next_largest){
      *next_largest = numbers[i];
    }
  }
}

int main() {
  int numbers[] = {3, 1, 2, 3, 6, 2, 8, 0, 0, 0};
  int len = 3;
  int largest, next_largest;

  //==>??? printf("%d %d", largest_two(numbers, len, &largest, &next_largest));

  }

最佳答案

从指针问题的侧面(你应该阅读关于它们的教程/书籍),你的主要问题是你试图打印返回类型为 void 的函数的单个返回值。这意味着它根本不会返回。

您的代码:

int main() {
  int numbers[] = {3, 1, 2, 3, 6, 2, 8, 0, 0, 0};
  int len = 10; // sizeof(numbers)
  int largest, next_largest;
  largest_two(numbers, len, &largest, &next_largest);
  printf("%d %d", largest, next_largest);
  }

请记住,这仍然不完全正确,但它确实解决了打印数字的问题。

另外,通过 len意味着你不应该这样做 for (i=0; i<sizeof(numbers); i++)但这反而是for (i=0; i<len; i++)

关于c - 如何在 C 中返回数组中最大的两个数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42086723/

相关文章:

c++ - "Deep"头部依赖分析

c - C中链表的两种不同情况

arrays - 找出两个数组之间差异的算法

JavaScript 数组和闭包

java - 在包内传递字节数组将变为空

C++:指针和抽象数组类

c - void 表达式的无效使用

c++ - Windows Netapi32

c - 正确填充结构成员的函数

c++ - 没有将指针列表正确传递给函数