指向一组uint的指针

时间:2013-02-27 07:26:17

标签: c arrays pointers

我在C中编写一个算法,它将指针指向无符号整数数组,因为输入会进行某种过滤并将结果返回给指针数组。我这样做了:

static void Filtering(Inst_t *psStruct, uint8 *arraypointer)
{
    uint8 *arrayFilter; 
    uint32 i, n = 0, uCount;
    uCount = psStruct->uCount;   

    for (i = 0; i < uCount; i++)
    {        
       arraypointer[i]  = (arraypointer[i] + arraypointer[i - 1] +  arraypointer[i + 1])/3;     
    }
}

这样做会覆盖数据。但我不希望这种情况发生。因此,想要制作指针指向的数组数据的本地副本,然后使用它来计算平均值并将计算值传回。

我正在考虑分配一个大小为* arraypointer的数组,并用指针数组值初始化它,并使用这个本地副本。从理论上讲,这对我有意义,但不确定这是否是最好的方法。

非常感谢任何解决此问题的指针/代码。请帮忙。

提前致谢。

3 个答案:

答案 0 :(得分:1)

不确定。这是实现返回新数组的函数的完全合法的方法。

您可以这样做以快速复制元素:

uint8 *newarray = malloc(uCount * sizeof(uint8));
memcpy(newarray, arraypointer, uCount * sizeof(uint8));

/* do work on newarray */
return newarray;

请务必记录您的函数返回动态分配的数组,并确保在完成后释放它。

答案 1 :(得分:1)

如果您不想修改数据,那么为什么功能会这样做呢?而不是试图发明躲避自己的程序设计的方法,改变函数的定义并以不同的方式实现它。

static void Filtering (Inst_t *psStruct, 
                       const uint8_t* source, 
                       uint8_t* result)

然后在来电者中:

uint8_t* filtered_buf = malloc (sizeof(buf));

Filtering(some_struct, buf, filtered_buf);

free(filtered_buf);

答案 2 :(得分:0)

由于您似乎在uCount字段中有可用元素的数量,因此您当然可以创建本地副本。

如果您只想计算平均值(只读操作),我不明白为什么需要本地副本。

要创建副本,您可以执行以下操作:

const size_t num_bytes = psStruct->uCount * sizeof *local;
uint8 *local = malloc(num_bytes);
memcpy(local, arraypointer, num_bytes);

当然,您应该在使用前检查local是否为NULL,并在从函数返回之前检查free()(除非您想要return新数组结果,在这种情况下,调用者成为free()完成后的责任。