分配结构体

3

I have a struct like

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个回答

2

首先,我认为以下代码不是你想象中的那样:

struct T {
   int *baseofint
}Tstruct, *pTstruct;

int one;
pTstruct pointer;

你正在声明一个结构体类型struct T,并创建了一个名为Tstruct的实例和一个指向它的指针pTstruct。但这些不是你正在创建的类型,而是变量。这使得pTstruct指针;也成为无效代码。你可能想要的是一个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

1

pTstruct是一个指向结构体的指针。该结构体包含一个指向整数的指针。因此,您需要对它们进行解引用。尝试:

*((*pointer).baseofint)

还要注意

p->x

是...的缩写

(*p).x

所以

*(pointer->baseofint)

同样有效(且更易于阅读)。


0
你需要使用->来通过指针访问结构体成员。下面这两个表达式是等价的:
pointer->baseofint
(*pointer).baseofint

在您的情况下,您还需要取消引用baseofint
one = *pointer->baseofint;

你刚刚碰到了一个很好的例子,说明隐藏类型为指针是个坏主意。

我猜你正在使用C++编译器,因为你的代码中没有typedef,这可能会给你带来问题。


0

你可能想要使用*(pointer->baseofint)


0

应该是 *pointer->baseofint


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接