C++/Arduino 将指向存储在 PROGMEM 中的二维数组的指针传递给函数
C++/Arduino Passing pointer to 2D array stored in PROGMEM to a function
我有几个 const int 二维数组全局存储在 PROGMEM 中。例如:
const int image1[][17]PROGMEM = {
{1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0},
{1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0},
{1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0},
{1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0}
}
我想在一个函数中读出这个二维图像数组。需要在参数中指定读出哪张图片。
void printImage(image)
{
// do something with element i,j of image
pgm_read_byte(image[i][j])
}
我对指针等的使用不是很熟悉,但我知道这是实现它的方法。你能告诉我如何让它发挥作用吗?
我现在是怎么做的;我的函数 printImage1() 没有任何参数,在主体函数中我使用:
pgm_read_byte(&image1[i][j])
读出image1。对于 image2、image3 等。我复制函数 printImage1 并将 imgage1 从上面更改为 image2、image3 等。这是冗余编程,这就是为什么我只想使用一个函数 printImage 在参数中指定图像。
很容易 - 通过使用数组引用:
void printImage(const int (&image)[5][17])
{
// ...
}
如果您希望传递的数组的大小始终为 5 x 17。否则您可以使用指向其第一个元素的指针:
void printImage(const int (*image)[17])
{
// ...
}
我有几个 const int 二维数组全局存储在 PROGMEM 中。例如:
const int image1[][17]PROGMEM = {
{1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0},
{1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0},
{1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0},
{1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0}
}
我想在一个函数中读出这个二维图像数组。需要在参数中指定读出哪张图片。
void printImage(image)
{
// do something with element i,j of image
pgm_read_byte(image[i][j])
}
我对指针等的使用不是很熟悉,但我知道这是实现它的方法。你能告诉我如何让它发挥作用吗?
我现在是怎么做的;我的函数 printImage1() 没有任何参数,在主体函数中我使用:
pgm_read_byte(&image1[i][j])
读出image1。对于 image2、image3 等。我复制函数 printImage1 并将 imgage1 从上面更改为 image2、image3 等。这是冗余编程,这就是为什么我只想使用一个函数 printImage 在参数中指定图像。
很容易 - 通过使用数组引用:
void printImage(const int (&image)[5][17])
{
// ...
}
如果您希望传递的数组的大小始终为 5 x 17。否则您可以使用指向其第一个元素的指针:
void printImage(const int (*image)[17])
{
// ...
}