返回数组中小于3.0的元素数

时间:2014-03-02 07:29:51

标签: c arrays pointers

我正在创建一个函数,它返回数组中小于3.0的元素数。

我正在尝试使用函数原型int smaller_than_three(int *x, int size);,其中x是指向数组第一个元素的指针,size是数组的大小。

这是我到目前为止的代码:

#include <stdio.h>

int smaller_than_three(int *x, int size);     

int main()
{
    smaller_than_three(0,10);
    return 0;
}


int smaller_than_three(int *x, int size)
{
    int array[size][size];
    *x = &array[size][0];

    int i;
    int j=0;
    for (i=0; i<size; i++){
        if (array[size][i] < 3.0) {
            j = j+1;
        }
    }
    return j;
}

我不确定问题出在*x并实现我的数组。

2 个答案:

答案 0 :(得分:1)

如果考虑到数组变量是(本质上)指针,并且在作为函数参数传递时始终是指针,并且指针可以被视为数组,那么您的代码就变成了这样:

int smaller_than_three(int* list, int size)
{
    int found = 0;

    for (int index = 0; index < size; index++)
    {
        if (list[index] < 3)
           found++;
    }

    return found;
}

int main()
{
    int list[] = {10,9,8,7,6,5,4,3,2,1};
    int found = smaller_than_three(list, 10);
    printf("%d\n", found); // prints "2"
    return 0;
}

此外,您将整数列表中的元素与“3.0”(浮点值)进行比较。这会导致较小的开销,并引入可能不需要的浮点。如果需要浮点比较,可以选择将列表数组更改为“double”或“float”类型。

答案 1 :(得分:0)

您将int*设置为未初始化的数组:

int array[size][size];
*x = &array[size][0];

您可能希望接收指向数组的指针作为函数参数,而不是覆盖它。因为它没有多大意义。删除这两行,并将指向实际数组的指针传递给函数。