如何在循环中访问结构的成员?

时间:2015-11-20 00:27:04

标签: c++ for-loop struct

排序版本:我有一个for循环,在每次迭代中我想访问一个结构的不同成员(按顺序)。这在C ++中是否可行?我记得当我在学校学习这类东西时可能会回来的事情,但我可能一直在考虑一种较低级别的语言/系统。

详细信息:这是我的结构:

struct meg_data_packet { /* decodes a meg data packet */
    struct data_value channel0;
    struct data_value channel1;
    struct data_value channel2;
    struct data_value channel3;
    struct data_value channel4;
    struct data_value channel5;
    struct data_value channel6;
    struct data_value channel7;
    struct data_value channel8;
    struct data_value channel9;
    struct data_value channel10;
    struct data_value channel11;
    struct data_value channel12;
    struct data_value channel13;
    struct data_value channel14;
    struct data_value channel15;
    char reset_flag0;
    char reset_flag1;
    char reset_flag2;
    char reset_flag3;
    char reset_flag4;
    char reset_flag5;
    char reset_flag6;
    char reset_flag7;
    char reset_flag8;
    char reset_flag9;
    char reset_flag10;
    char reset_flag11;
    char reset_flag12;
    char reset_flag13;
    char reset_flag14;
    char reset_flag15;
    uint32_t sequence_number;
};

data_value是一个只包含uint32_t的简单结构。我希望能够以meg_data_packet[0]获取channel0[1]获取channel1等类似方式访问这些成员。

编辑:哇,这些是快速回复。我应该更清楚。由于结构的初始化方式,我无法使用数组。它基本上只是现有数据结构的重新组合(实际上是一个u_char数组,我从通过tcp套接字发送的系统中获取信息)。我正在将旧数据结构转换为此数据结构以利用它的结构,因为我需要访问u_char表示的实际值。

2 个答案:

答案 0 :(得分:3)

你可以使用这样的数组:

outputImage = imageRead('C:\abc\def\ghi.bmp');

或者更好的是struct meg_data_packet { /* decodes a meg data packet */ data_value channels[16]; char reset_flags[16]; uint32_t sequence_number; };

std::array

访问以下元素:

struct meg_data_packet { /* decodes a meg data packet */
    std::array<data_value, 16> channels;
    std::array<char, 16> reset_flags;
    uint32_t sequence_number;
};

答案 1 :(得分:2)

是的,这是可能的。使用offsetof初始化指针偏移数组。然后将其添加到reinterpret_cast<char*>(&struct_var),将其转换为目标类型,然后你去...你有一个指向成员的指针,你可以按顺序迭代它们。

当然,您需要两个循环,一个用于data_values,另一个用于reset_flags。

我还应该注意,这不是你应该如何在C ++中做事。这是C方式。 C ++有更多,更好的提供。