我有一个指针数组。如何获取它们指向的数组的值?
int main() {
const int violet[3] = { 128, 0, 256 };
const int springGreen[3] = { 0, 256, 128 };
const int orange[3] = { 256, 128, 0 };
const int (*colorOrder[3])[3] = { &orange, &violet, &springGreen };
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << *colorOrder[i][j];
if (j < 2) { cout << ","; }
}
cout << "\n";
}
}
上面的代码应该输出:
256,128,0
128,0,256
0,256,128
但它实际输出的是:
256,0,128
128,0,1144230067
0,128,0
我尝试在here实现解决方案,但它似乎不适用于 int 数组。我觉得问题出在我对指针的了解(或缺乏)上。有人可以解释一下这是怎么回事吗?
变量
colorOrder
是一个指针数组。
因此,要获取指向颜色值数组的指针,您需要取消引用 colorOrder
项:
*(colorOrder[color_group_index]);
要获取组外的颜色值,可以使用
operator[]
:
(*(colorOrder[color_group_index]))[color_value_index]);
我建议使用颜色结构来使其更具可读性:
struct Pixel
{
uint8_t quantity_of_red;
uint8_t quantity_of_green;
uint8_t quantity_of_blue;
};
Pixel violet_Pixel{128, 0, 256};
Pixel spring_green_Pixel{ 0, 256, 128 };
Pixel orange_Pixel = { 256, 128, 0 };
std::vector<Pixel> pixel_colors{violet_Pixel, spring_green_Pixel, orange_Pixel};
此外,此技术允许您自定义输出:
std::ostream& operator<<(std::ostream& out, const Pixel& p)
{
out << "[Red: " << p.quantity_red << "\n";
out << "Green: " << p.quantity_green << "\n";
out << "Blue: " << p.quantity_blue << "]\n";
return out;
}
//...
std::cout << violet_Pixel;
我的建议是尽可能使用
struct
或 class
并将数组留给 FORTRAN。