从动态分配的2D数组指针中获取行
Get An Row From Dynamically Allocated 2D Array Pointer
我是C++的新手,在处理指针时遇到了麻烦。
//Define Colormaps (for brevity they are null)
//256 rgb combinations in each colorMap
uint8_t colorMap0[256][3];
uint8_t colorMap1[256][3];
//Insert Color Maps in to a storage array via pointer
uint8_t *colorMaps[] = {*colorMap0, *colorMap1};
//Well define a current Map Index to read from colorMaps
uint8_t colorMapIndex = 0;
//We will define a pointer to the active array that we'll update in loop()
uint8_t *currentColorMap;
偶尔我们会重新分配当前的颜色图
currentColorMap = colorMaps[colorMapIndex];
其他时候我们可以从中获得值
uint32_t c = GetColorFromMap(125);
我们还需要这些功能
// Create a 24 bit color value from B,G,R
uint32_t Color(uint8_t r, uint8_t g, uint8_t b)
{
uint32_t c;
c = r;
c <<= 8;
c |= g;
c <<= 8;
c |= b;
return c;
}
uint32_t GetColorFromMap(byte indexValue)
{
uint8_t rgb = currentColorMap[indexValue];
return Color(rgb[0], rgb[1], rgb[2]);
}
问题在于如何从当前的颜色图中获取值
当前代码在CCD_ 2中给我3个CCD_。
我已经尝试了currentColorMap中的指针,但得到了:
invalid type argument of unary '*' (have 'uint8_t {aka unsigned char}')
我不得不用一个低记忆脚印的灵魂,因为这是一个arduino。我之前制作了一个256x3字节的数组,这会扼杀我的动态内存。。。。不管怎样编译。如果不是一回事,那就是另一回事!
在C/C++中,多维数组实际上不像其他语言中那样是两个数组的集合。相反,int arr[a][b]
与int arr[a*b]
相同,只是它将在幕后进行一些计算。如果你仔细想想,它会从数学上产生。具体来说,它允许您编写int arr[x][y]
,它将执行以下操作:
int arr[x*b+y]
这样想:每个x
行一个接一个,每个行都填充有y
s。因此,如果你按x
行的长度计算,你就可以访问该特定条目。因此,在您的示例中,rgb
等于'invalid types 'uint8_t {aka unsigned char}[int]' for array subscript'
0第10个颜色字节,它不是全色。
然而,存在一个问题。您有一个指针currentColorMap
,它是您当前要使用的数组。但是,当将多维数组复制到指针中时,编译器会"忘记"它曾经是什么。所以,你必须为它做简单的工作。
uint8_t *rgb = currentColorMap + indexValue * 3;
我们在这里干什么?我们只需取currentColorMap
的指针,并将添加到索引的三倍。为什么三次?因为你的第二个维度是三,或者,因为每种颜色有三个字节。那么你的颜色实际上就是一个指向真实颜色的指针。你现在可以像以前一样对待它:
return Color(rgb[0], rgb[1], rgb[2]);
- 使用 GTK3 C++获取指针坐标
- 获取指针的地址会为其分配一个值
- 如何获取指针数组中的元素数量?
- 从 numpy 数组获取指针以将图像发送到C++
- 如何根据指针地址获取指针内容
- 指针数组.获取指针元素的值
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 如果地址已知,如何获取指针变量的名称
- 动态创建函数并获取指针
- 从矢量的元素获取指针
- 获取指针和常规整数的奇怪值
- 从没有强制转换的整数中获取指针。知道什么,但不知道如何
- 如何在 c/c++ 中获取指针的地址?
- 在头文件中的函数原型中获取指针数组:函数声明为 void
- 如何从“boost::function”中获取 C 指针(如 'var (*)(vo
- 获取"指针 1"到"指针 3"的值
- C :功能获取指针或引用
- 如何从指针中获取指针指向的值的地址
- 如何使用scanf获取指针大小的整数
- 获取指针的地址并将其转换为wxString