关于结构在C中的简单解释

时间:2011-02-07 11:16:12

标签: c struct

我已经有了一些想法,但我认为从沙发上的精彩人士那里得到一些意见是很好的。

如果我的问题太宽泛或含糊不清,请告诉我。

4 个答案:

答案 0 :(得分:9)

问题有点宽泛,但是......

struct是聚合复合数据类型,用于表示由可能不同类型的多个属性描述的实体。一些例子:

  • 3-D空间中的点,由3个实值坐标x,y和z表示;
  • 邮寄地址,以街道名称,住宅或公寓编号,城市,州,邮政编码;
  • 表示
  • 发票中的订单项,由部件名称或编号,单位成本,数量和小计表示;
  • 树中的节点,由键,数据值,左子项和右子项表示;
等等,等等。

让我们看一下邮寄地址作为一个具体的例子。我们可以按如下方式定义我们的邮寄地址类型:

struct Address {
  char *streetName; 
  int buildingNumber;  // House, apt building, office building, etc.    
  char *aptNumber;     // Handles apt and suite #s like K103, B-2, etc.
  char *city;
  char state[3];
  int zip;
};

我们会像这样创建一个该结构的实例:

struct Address newAddress;

和指向该实例的指针:

struct Address *addrPtr = &newAddress;

并使用.->运算符访问每个字段,具体取决于我们是处理结构实例还是指向结构的指针:

newAddress.streetName = strdup("Elm");
addrPtr->buildingNumber = 100;
...

查看结构的另一种方法是类似于由多个字段组成的数据库记录

答案 1 :(得分:6)

这是一个自定义内存布局,内存区域内的偏移量具有人类可读的别名。

答案 2 :(得分:2)

也许不是最简单的解释,但为了完整起见,这就是标准对结构的看法(C996.2.5§20):

  

结构类型描述了一个   顺序分配非空集   成员对象(在某些情况下)   情况,一个不完整的数组),   每个都有一个可选的   指定的名称,可能不同   类型。

答案 3 :(得分:0)

来自MSDN -

结构类型是用户定义的复合类型。它由可以具有不同类型的字段或成员组成。