数组中的最大数量

时间:2014-02-11 22:27:20

标签: c arrays pointers for-loop

我知道这个解决方案存在很多解决方案,但在环顾四周之后我还没有找到任何涉及指针的解决方案

现在它不停地发出警告,根本没有输出,我做错了什么?

#include <stdio.h>

int findbig (int a[], int n)
{
    int max = a[0];

    for (int i = 1; i < n; i++)
    {
        if (a[i] > max)
        {
            max = a[i];
        }
    }

    return max;
}



int main (void)
{

int n;

printf("How many numbers? \n");
scanf("%d", &n);

int a[n];

printf("Now enter those %d numbers: \n", n);

    for (int i = 1; i < n; i++)
    {
        scanf("%d", &a[i]);
    }

int biggest = findbig (a[n], n);

printf("The biggest number is: %d\n", biggest);

return 0;
}

我的编译器抱怨:

  

-warning:传递'findbig'的参数1使得整数指针没有强制转换[默认启用]

     

-note:期望'int *'但参数的类型为'int'

3 个答案:

答案 0 :(得分:3)

a[n](以及它的等效*(a + n)形式)是一个int,而不是指向int的指针。它也是你阵列边界的一个。您需要将警告变为错误。你传递一个int,其被转换为一个指针(地址),这是好的。

您需要像这样调用您的函数:

findbig(a, n);

无论您的签名如何,findbig都会收到指向int的指针。你不能将数组传递给C中的函数(或从中返回它们)。它们会降级为指向第一个元素的指针。


另外,在填充数组时,您总是跳过第一个元素,因此用户说“我想输入N个数字”,但您只允许他们输入n-1。当您使用a[0]作为初始max数字时,这也是有问题的,但该元素的值是不确定的。

它可能是任何东西,即一些巨大的数字,然后你的功能会产生奇怪的结果。将数组初始化为0(int a[n] = {0};)或将循环开始为0(更好)。

答案 1 :(得分:0)

通过索引a,执行a[n],您将获得第n个索引中数组a的值,该索引是int type。您需要使用数组“pointer”变量调用findbig(....);函数,而不对其进行索引,方法如下:

findbig(a, n);

答案 2 :(得分:-2)

这条线错了。

int a[n]

应使用常量值初始化数组,因为在执行程序之前会分配数组的空间。所以,变量不起作用。