我必须写一个带有签名的函数
int *greater (int n[], int length, int value)
返回指向数组的指针,该数组包含 n[] 中大于某个值的元素。返回的数组必须恰好是容纳大于 value 的值的长度,并且没有未使用的元素。
我有以下代码:
#include <stdio.h>
int k=0, v[100];
int * greater(int n[], int length, int value)
{
for (int i=0; i<length-1; i++)
if (n[i]>value)
{
v[k]=n[i];
k++;
}
int *p=v;
return p;
}
int main ()
{
int a[]={1,2,3,4,5};
int *p=greater (a,5,3);
int *end; end=v+k;
while (p<=end)
{
printf ("%i ", *p);
p++;
}
}
问题是 p 只会保留值 4,因此它会打印 4 0,而不是 4 5。知道我做错了什么吗?
最佳答案
要解决您的问题,请不要使用全局 数组( v[100];
)。相反,
根据@alk 先生的评论,您可以使用全局变量k
获取数组中元素的数量。 .
注意:一旦你用完内存,别忘了 free()
来自 main()
的指针.
BTW,推荐签名main()
是int main(void)
编辑:
此外,对于逻辑部分,如@BLUEPIXY和@karma_geek先生评论中提到的,请注意
- 将循环条件更改为
for (int i=0; i<length; i++)
- 更改
while
循环到while (p<end)
关于C - 返回指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30077782/