C - 返回指向数组的指针

标签 c arrays function pointers

我必须写一个带有签名的函数

 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]; )。相反,

  1. greater() 中定义一个指针
  2. 使用 malloc() 动态分配内存.
  3. 根据需要使用 realloc() 调整内存大小
  4. 返回指针。

根据@alk 先生的评论,您可以使用全局变量k 获取数组中元素的数量。 .

注意:一旦你用完内存,别忘了 free() 来自 main() 的指针.

BTW,推荐签名main()int main(void)


编辑:

此外,对于逻辑部分,如@BLUEPIXY@karma_geek先生评论中提到的,请注意

  1. 将循环条件更改为for (int i=0; i<length; i++)
  2. 更改 while循环到 while (p<end)

关于C - 返回指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30077782/

相关文章:

c++ - 将数据存储在指针的最高有效位中

javascript - 如何在 Javascript 中使用键值查找数组中的最新日期

c - C 中使用数组的大整数

ios - 创建多个数组,这些数组将加起来成为一个最终数组。调试问题。 swift 和 Xcode

c - 使用 for() 循环处理三角形值

c - Lua (LuaJit) 和 C 中的对象生命周期

java - C 与 Java 原始转换和表达式

c - 理解c代码有困难

function - powershell 中的美元符号、函数关键字和脚本 block

function - 我应该如何使用函数组合在 Haskell 中定义或编写我的函数?