c - 我如何在 C 中使指向数据数组的指针起作用?

标签 c pointers gcc

我有四个数据数组(每个数组 3072 字节)。我想指向其中一个数组,因此如果向函数传递指向这些数组的指针,它就可以操作它们,并且指针可以是

所以最初我想到了指针到指针:

uint16_t *buffer0_level[BUFF_WORDS] FAR;
uint16_t *buffer0_mask[BUFF_WORDS] FAR;
uint16_t *buffer1_level[BUFF_WORDS] FAR;
uint16_t *buffer1_mask[BUFF_WORDS] FAR;

uint16_t **draw_buffer_level;
uint16_t **draw_buffer_mask;
uint16_t **disp_buffer_level;
uint16_t **disp_buffer_mask;

然后要设置指针,我会执行以下操作:

draw_buffer_level = buffer0_level;
draw_buffer_mask = buffer0_mask;
disp_buffer_level = buffer1_level;
disp_buffer_mask = buffer1_mask;

这似乎有效。

但是,然后我想将指针传递给函数 fill_buffer,该函数用一些数据字填充其中一个数组。

定义是:

void fill_buffer(uint16_t *buff, uint16_t word)

但是当这样调用时:

fill_buffer(draw_buffer_level, 0x0000);
fill_buffer(draw_buffer_mask, 0x0000);
fill_buffer(disp_buffer_level, 0x0000);
fill_buffer(disp_buffer_mask, 0x0000);

海湾合作委员会提示:

gfx.c:46: warning: passing argument 1 of 'fill_buffer' from incompatible pointer type
gfx.c:47: warning: passing argument 1 of 'fill_buffer' from incompatible pointer type
gfx.c:48: warning: passing argument 1 of 'fill_buffer' from incompatible pointer type
gfx.c:49: warning: passing argument 1 of 'fill_buffer' from incompatible pointer type

我确信这只是一个愚蠢的错误,但它是什么?我还是 C 编程新手。

最佳答案

我假设您想要分配 BUFF_WORDS 16 位字的长缓冲区,而不是指针。为此,您需要像这样更改声明,

uint16_t buffer0_level[BUFF_WORDS] FAR;
uint16_t buffer0_mask[BUFF_WORDS] FAR;
uint16_t buffer1_level[BUFF_WORDS] FAR;
uint16_t buffer1_mask[BUFF_WORDS] FAR;

您实际上不需要声明指针来让函数初始化数组。您可以将数组名称(无论如何都是指针)直接传递给函数。但您必须将数组长度传递给函数。就像这样,

fill_buffer(buffer0_level, BUFF_WORDS, 0x0000);
fill_buffer(buffer0_mask, BUFF_WORDS, 0x0000);
fill_buffer(buffer1_level, BUFF_WORDS, 0x0000);
fill_buffer(buffer1_mask, BUFF_WORDS, 0x0000);

然后你就可以像这样实现你的函数,

void fill_buffer(uint16_t* buffer, int count, uint16_t value)
{
    int ii;
    for (ii = 0; ii < count; ++ii)
    {
        *buffer++ = value;
    }
}

关于c - 我如何在 C 中使指向数据数组的指针起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3867101/

相关文章:

c - 您是否需要为 C 中的结构中的函数指针分配空间?

c++ - 如何在 C++ 中获取 put() 流指针的值

c++ - Visual C++ 查找导致 "Debug Assertion failed"的行

c - 在 struct 中发出初始化数组

计算c char中每个单词的长度

c - 这段打印 1 到 1000 的代码在 C 中如何工作?

c++ - 涉及类的突变困难

c - ARM neon 指令生成

无法使预编译头与arm-none-eabi-gcc一起工作

c - 如何初始化指向结构的指针数组?