【问题标题】:C++/Arduino Passing pointer to 2D array stored in PROGMEM to a functionC ++ / Arduino将指向存储在PROGMEM中的二维数组的指针传递给函数
【发布时间】:2015-03-01 06:27:23
【问题描述】:

我有几个 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 并将 image1 从上面更改为 image2、image3 等。这是冗余编程,这就是为什么我想只使用一个函数 printImage 在参数中指定图像。

【问题讨论】:

  • 所有图片的尺寸都一样吗?

标签: c++ arrays arduino


【解决方案1】:

很容易 - 通过使用数组引用:

void printImage(const int (&image)[5][17])
{
    // ...
}

如果您希望传递的数组的大小始终为 5 x 17。否则您可以使用指向它的第一个元素的指针:

void printImage(const int (*image)[17])
{
    // ...
}

【讨论】:

  • 非常感谢,我知道这与 & 和 * 有关,但不知道如何。
  • 它不起作用,编译器说错误:'printImage' 未在此范围内声明,即使该函数已按应有的方式声明。 ??
  • 好的,我解决了这个问题,我必须在设置函数上方添加一个显式原型 void printImage(const uint8_t (&image)[60][17]);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2016-04-27
  • 2017-08-09
  • 2014-05-09
相关资源
最近更新 更多