我有一个定义为
的结构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()
,因为这是要求。
答案 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);
}
这就是你想要的吗?这汇编了一个警告:“取临时地址”