美文网首页
结构(struct)

结构(struct)

作者: nytta | 来源:发表于2019-01-07 21:06 被阅读0次

结构声明

structure declaration描述了结构的组织布局,如下:

struct book {
  char title[MAXTITLE];
  char author[MAXAUTHOR];
  float price;
};

结构声明并未创建结构实际的对象,只是描述了对象是由什么组成的,有时也称为模板,它描述出结构是怎么存储数据的,而book是作为该结构的标记,那么声明该结构变量可以使用book标记,这个book相当于结构的副名,所以我们可以定义一个结构变量:

struct book library;

当然,我们也可以定义一个结构指针:

struct book * ptbook;

初始化结构

我们可以这样初始化结构变量

struct book library = {
  "abc",
  "def",
  0.13F
};

这样,是按照结构里各个属性声明顺序为它们初始化值的,
或者单独为结构book的各个属性独立赋值,

library.title = "abc";
//...

或者
使用结构的初始化器为结构初始化值:

struct book library = {
    .title = "abc",
    .author = "def",
    .price = 0.13F
};

声明结构数组

声明结构数组和其他数据类型的数组类似,下面是一个声明结构数组的例子:

struct book libraries[MAXBOOKS];

libraries是声明内含MAXBOOKS个元素的数组,每个元素都是struct book类型的。

嵌套结构

在一个结构中包含另一个结构(即嵌套结构)很方便,比如:

struct names {
   char first[LEN];
   char last[LEN];
};
struct guy {
   struct names name;
   char job[LEN];
   float income;
};

指向结构的指针

使用指针的几个理由:

  • 第一、就像指向数组的指针比数组本身更容易操控(如,排序问题)一样,指向结构的指针通常比结构本身更容易操控;
  • 第二、在一些早期的C实现中,结构不能作为参数传递给函数,但是可以传递指向结构的指针;
  • 第三、即使能传递一个结构,传递指针通常更有效率;
  • 第四、一些用于数据的结构中包含指向其他结构的指针。

声明和初始化结构指针

结构指针,如:

struct guy * ptguy;

如果你之前已经声明一个变量struct guy g,那么你可以给结构指针ptguy赋值:

 ptguy = &g;

指针访问成员

第1种方法也是比较常用的方法:使用->运算符。
如果ptguy == &g,则可以ptguy->income,即是g.income
第2种方法,在指针和正常变量中,&和*是一对互逆运算符,则可以
如果ptguy == &g,则g.income == ptguy->income == (*ptguy).income

相关文章

网友评论

      本文标题:结构(struct)

      本文链接:https://www.haomeiwen.com/subject/mpbprqtx.html