C++中具有动态大小的嵌套结构

我试图在 showValues(mainStruct*) 中打印数据,但我无法这样做..

#include <iostream>
#include <string>
#include <vector>
#include <memory>

typedef struct
{
  uint32_t someNumber;    
}subStruct;

typedef struct{
    uint32_t sizeofSubStruct;
    subStruct subStructArray[1];
}mainStruct;

此函数构造 mainStruct 并用一些值填充它

mainStruct* constructMainStruct()
{
    mainStruct* msPtr;
    msPtr = (mainStruct*)malloc(sizeof(mainStruct)*10);
    msPtr->sizeofSubStruct = 10;

    subStruct* ssPtr = msPtr->subStructArray;
    for(uint32_t i=0; i < msPtr->sizeofSubStruct; i++)
    {
        ssPtr->someNumber = i+10;
        ssPtr++;       
    }             
    return msPtr;
}

以下功能不打印任何内容

void showValues(mainStruct* msPtr)
{
    subStruct* ssPtr = msPtr->subStructArray;
    for(uint32_t i=0; i < msPtr->sizeofSubStruct; i++)
    {   
     std::cout << " - " + ssPtr->someNumber <<std::endl;
    }
}

主功能

int main()
{
    //contructing mainStruct with some values
    mainStruct* msPtr = constructMainStruct();

    //trying to print values which has been created in above step
    showValues(msPtr);
}

以下是 showValues 的工作代码

void showValues(mainStruct* msPtr)
{
    subStruct* ssPtr = msPtr->subStructArray;
    for(uint32_t i=0; i < msPtr->sizeofSubStruct; i++)
    {   
     std::cout << (ssPtr+i)->someNumber <<std::endl;
    }
}

完整的程序代码如下:

#include <iostream>

typedef struct
{
  uint32_t someNumber;    
}subStruct;

typedef struct{
    uint32_t sizeofSubStruct;
    subStruct subStructArray[1];
}mainStruct;

mainStruct* constructMainStruct()
{
    mainStruct* msPtr;
    msPtr = (mainStruct*)malloc(sizeof(mainStruct)*10);
    msPtr->sizeofSubStruct = 10;

    subStruct* ssPtr = msPtr->subStructArray;
    for(uint32_t i=0; i < msPtr->sizeofSubStruct; i++)
    {
        ssPtr->someNumber = i+10;
        ssPtr++;       
    }             
    return msPtr;
}
void showValues(mainStruct* msPtr)
{
    subStruct* ssPtr = msPtr->subStructArray;
    for(uint32_t i=0; i < msPtr->sizeofSubStruct; i++)
    {   
     std::cout << (ssPtr+i)->someNumber <<std::endl;
    }
}

int main()
{
    //contructing mainStruct with some values
    mainStruct* msPtr = constructMainStruct();

    //trying to print values which has been created in above step
    showValues(msPtr);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章