代码之家  ›  专栏  ›  技术社区  ›  Thomas O

如何使指向数据数组的指针在C中工作?

  •  0
  • Thomas O  · 技术社区  · 14 年前

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   Ziffusion    14 年前

    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;
        }
    }
    
        2
  •  0
  •   San Jacinto    14 年前

    fill_buffer(*draw_buffer_level, 0x0000);