我有一个像

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*

也许有人可以帮忙,谢谢。

最佳答案

首先,我不认为下面的代码是你认为的那样:

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

关于c - 分配结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8014104/

10-12 16:00