在C ++中创建结构的指针

时间:2014-06-09 17:33:38

标签: c++ pointers struct

我有一个定义为

的结构
typedef struct  BSP_AREA {

    struct BSP_AREA  *otherBspArea;         /* Pointer to itself */
    long             BSPReturnCode;                
    short            sGroupNum;             /* default to 0 */
    char             filler4[6];            /* alignment bytes */
    unsigned char    byCobolWorkArea[20];   /* Cobol Work Area */
    // .... and lots of others fields

} * PBSP_PASS ;

所以基本上BSP_AREA可以保存对自身的指针引用,以创建一种链接列表。

在代码中,我有一个方法createNode(),它返回带有方法签名BSP_AREA的{​​{1}}。所以在这个方法中我只是初始化一个BSP_AREA createNode()并返回它。现在,在调用此方法之后,将其包含的指针设置为自身,我正在执行此操作,但收到错误。

BSP_AREA

如何将指针otherBSP初始化为从BSP_AREA cobolPassArea2 = createNode(data1); cobolPassArea->otherBspArea = &cobolPassArea2; 返回的BSP_PASS_AREA?请不要建议让createNode返回一个指针,而不是具体的createNode(),因为这是要求。

2 个答案:

答案 0 :(得分:1)

cobolPassArea->otherBspArea = &cobolPassArea2;

应该是

cobolPassArea2.otherBspArea = &cobolPassArea2;

请注意,->除了将.添加到左侧的变量名称之外,还已更改为2

答案 1 :(得分:-1)

#include <cstdio>
#include <cstdlib>

typedef struct  BSP_AREA 
{

  struct BSP_AREA  *otherBspArea;   
  int something;
} *PBSP_PASS ;


struct BSP_AREA create()
{
   BSP_AREA x;
   x.something = 5;
   return x;
}

//这个主要你需要强制编译器接受(-gpermissive on g ++)

int main()
{
   BSP_AREA s;
   s.otherBspArea = &(create());
   printf("%d", s.otherBspArea->something);
}

//这个应该可以正常工作......但是,这些要求有点奇怪

 int main()
{
   BSP_AREA s, r;
   r = create();
   s.otherBspArea = &r;
   printf("%d", s.otherBspArea->something);
}

这就是你想要的吗?这汇编了一个警告:“取临时地址”