如何在C中创建指向数组数组的指针?

时间:2010-10-05 19:41:54

标签: c pointers gcc

我有四个数据数组(每个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编程的新手。

2 个答案:

答案 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);