05结构体

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33487044/article/details/82155965

05结构体

结构体

struct point {

    int x;
    int y;

}

关键字 struct 引入结构声明。结构声明由包含在花括号内的一系列声明组成。关键字 struct 后面的名字是可选的,称为结构标记(这里是 point)。结构标记用于为结构体命名,在定义之后,结构标记就代表花括号内的声明。

struct 声明定义了一种数据类型。在标志结构成员表结束的花括号之后可以跟一个变量,这与其它基本类型的变量声明是相应的。例如

struct { ... } x,y,z;

这个声明将x、y、z 声明为指定类型的变量,并且为它们分配存储空间。如果结构声明后面不带变量表,则不需要为它分配存储空间。

struct point pt;

定义了一个 struct point 类型的变量 pt。结构的初始化可以在定义的后面使用初值表进行。初值表中同每个成员对应的初值必须是常量表达式,例如:

struct point maxpt = {320, 200};

或

maxpt.x = 320;
maxpt.y = 200;

在表达式中,可以通过下列形式引用某个特定结构中的成员:

结构名.成员

pt.x;
pt.y;

结构体雨人可以嵌套,如下

struct rect {

    struct point pt1;
    struct point pt2;

}

struct rect screen;
screen.pt1.x;
screen.pt2.y;

结构体与函数

通过三种可能的方法可以传递结构体:

  • 分别传递各个结构体成员
  • 传递整个结构体
  • 传递指向结构体的指针
struct makepoint(int x, int y) {

    struct point temp;

    temp.x = x;
    temp.y = y;

    return temp;

}

makepoint(pt.x,pt.y);
struct makepoint(struct point p) {

    struct point temp;

    temp.x = p.x;
    temp.y = p.y;

    return temp;

}

makepoint(pt);

如果传递给函数的结构体很大,使用指针的方式传递结构体通常比复制整个结构体的效率要高。结构体指针类似于普通变量指针,声明

扫描二维码关注公众号,回复: 3031497 查看本文章
struct point *pp;

结构体指针引用成员变量

(*pp).x;
(*pp).y;

pp->x;
pp->y;

结构体数组

struct key {

    char *word;
    int count;

} keytab[NUM];

或

struct key keytab[NUM] = {

    "auto",0,
    "break",0,
    "case",0,
    "while",
};

指向结构的指针

struct point *pp;

(*pp).x;
(*pp).y;

pp->x;
pp->y;

自引用结构

struct node {

    char *word;
    int count;
    struct node *left;
    struct node *right;

};

类型定义(typedef)

C 语言提供一个称为 typedef 的功能,用来建立新的数据类型名,例如,声明

typedef int Length;

将 Length 定义为与 int 具有同等意义的名字。类型 Length 可用于类型声明、类型转换等,它和类型 int 完全相同,例如

Length len,maxLen;
Length *lengths[];

接下来,用 typedef 定义树节点

typedef struct node *TreePtr;

typedef struct node {

    char *word;
    int count;
    struct node *left;
    struct node *right;

} TreeNode;

上面的类型定义创建了两个新型类关键字:TreeNode(结构体)和 TreePtr(一个指向该结构体的指针)。

用 typedef 定义函数

typedef int (*PFI)(char *,char *);

该语句定义了类型 PFI 是「一个指向函数的指针,该函数具有两个 char * 类型的参数,返回值类型为 int」。

联合 Union

猜你喜欢

转载自blog.csdn.net/qq_33487044/article/details/82155965