我有一个类似
的结构struct T {
int *baseofint
}Tstruct, *pTstruct;
int one;
pTstruct pointer;
现在我要定义
one = pointer.baseofint; //got filled with an integer;
error message: **operator is not equal to operand**
我也试过
one = *(pointer.baseofint);
error message:**operand of * is no pointer*
也许有人可以提供帮助,谢谢。
答案 0 :(得分:1)
pTstruct是指向结构的指针。该结构包含指向int的指针。所以你需要将它们解除引用。尝试:
*((*pointer).baseofint)
另请注意
p->x
是
的缩写(*p).x
所以
*(pointer->baseofint)
也有效(并且难以阅读)。
答案 1 :(得分:1)
首先,我不认为以下代码是您认为的:
struct T {
int *baseofint
}Tstruct, *pTstruct;
int one;
pTstruct pointer;
您声明了一个结构类型struct T
,并创建了一个名为Tstruct
的实例和一个名为pTstruct
的指针。但那些不是你正在创造的类型,它们是变量。这也使pTstruct pointer;
无效代码。您可能想要的是typedef:
typedef struct T {
int *baseofint;
} Tstruct, *pTstruct;
...使Tstruct
等同于struct T
,pTstruct
等同于struct T *
。
至于访问和取消引用baseofint
字段,根据您是否通过指针访问它而略有不同......但是这里是如何:
Tstruct ts; // a Tstruct instance
pTstruct pts = &ts; // a pTstruct -- being pointed at ts
/* ...some code that points ts.baseofint at
* an int or array of int goes here... */
/* with * operator... */
int one = *(ts.baseofint); // via struct, eg. a Tstruct
int oneb = *(pts->baseofint); // via pointer, eg. a pTstruct
/* with array brackets... */
int onec = ts.baseofint[0]; // via Tstruct
int oned = pts->baseofint[0]; // via pTstruct
答案 2 :(得分:0)
您可能想要*(pointer->baseofint)
。
答案 3 :(得分:0)
应为*pointer->baseofint
答案 4 :(得分:0)
您需要使用->
通过指针访问结构成员。以下两个表达式是等效的:
pointer->baseofint
(*pointer).baseofint
在您的情况下,您还需要取消引用baseofint
:
one = *pointer->baseofint;
你刚刚找到了一个很好的例子,说明为什么隐藏类型是指针的事实是个坏主意。
我猜你使用的C ++编译器基于代码中没有typedef
的代码 - 你最终也可能会遇到问题。