我正在创建一个函数,它返回数组中小于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
并实现我的数组。
答案 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];
您可能希望接收指向数组的指针作为函数参数,而不是覆盖它。因为它没有多大意义。删除这两行,并将指向实际数组的指针传递给函数。