在 C++ 中使用指针数组中的值

问题描述 投票:0回答:1

我有一个指针数组。如何获取它们指向的数组的值?

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 数组。我觉得问题出在我对指针的了解(或缺乏)上。有人可以解释一下这是怎么回事吗?

c++ arrays pointers
1个回答
1
投票

变量

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。

© www.soinside.com 2019 - 2024. All rights reserved.