我有四个数据数组(每个数组 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/