分配结构

时间:2011-11-04 18:30:44

标签: c

我有一个类似

的结构
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*

也许有人可以提供帮助,谢谢。

5 个答案:

答案 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 TpTstruct等同于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的代码 - 你最终也可能会遇到问题。