我有四个数据数组(每个3072个字节。)我想指向其中一个数组,所以如果函数传递了一个指向这些数组的指针,它可以操作它们,指针可以是s
所以最初我想到了指针指针:
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编程的新手。
答案 0 :(得分:2)
我假设您要分配16位字的BUFF_WORDS长缓冲区,而不是指针。为此,您需要更改声明,
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;
}
}
答案 1 :(得分:0)
你需要取消引用指针指针。
fill_buffer(*draw_buffer_level, 0x0000);