创建2D数组和指向&array-1的指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建2D数组和指向&array-1的指针相关的知识,希望对你有一定的参考价值。

对于arm项目中的显示驱动程序,我想访问缓冲区作为2D数组来访问它,如下所示:

e.g. display_buffer[2][113]=0xff;

要通过I2C将缓冲区写入显示器,我想将整个缓冲区写出来,但需要在它前面加上0x40。

io_write(I2C_0_io, (uint8_t *)buf, 513); //where buf should be 0x40,content, of, display_buffer,...

有没有办法声明display_buffer[4][128],使它在它之前有一个字节和一个指向它的指针?

我试过了

uint8_t *_display_buffer = (uint8_t*)513;
uint8_t *display_buffer[4][128]=_display_buffer+1;

但当然编译器认为这不是一个好主意(“初始化程序无效”)

答案

您需要将_display_buffer定义为足以容纳2D数组加1个字节的数组,并将display_buffer定义为指向数组的指针(可以将其索引为2D数组)而不是2D数组:

uint8_t _display_buffer[513] = { 0x40 };
uint8_t (*display_buffer)[128]=(uint8_t (*)[128])(_display_buffer+1);

以上是关于创建2D数组和指向&array-1的指针的主要内容,如果未能解决你的问题,请参考以下文章

正确传递包含指向函数的指针的数组

从 2D 向量创建 1D 向量的函数(错误:表达式必须具有指向对象的指针类型)

如何在 C++ 中初始化指向动态二维数组的指针 [关闭]

指向成员数组的静态指针,用于安全的operator []访问

当指针指向数组时,为啥 operator(*) 的值不起作用?

如何使用指针从2D char数组中生成一个句子