结构体(第十四章 )

 

 

※目录:

 

一、结构体简单运行实例

 

二、结构体具体使用

 

  1. 声明
  2. 定义
  3. 初始化
  4. 访问

 

三、结构数组

 

四、指向结构的指针

 

  1. 声明初始化
  2. 访问

 

 

 

 

一、结构体最简单的运行实例

 

结构体是描述结构如何组合的主要方法。

以下为创建图书目录的一个简单实例:

#include<stdio.h>
#define MaxTitle 41
#define MaxAuther 31

struct Book{//单词book为一个可选标记
    char title[MaxTitle];
    char auther[MaxAuther];
    float value;
};//结构声明

int main(void){
    struct Book library;//定义结构变量
    printf("请输入书名:\n");
    gets(library.title);
    printf("请输入作者名:\n");
    gets(library.auther);
    printf("请输入价格:\n");
    scanf("%f",&library.value);
    printf("《%s》自 %s:(%.2f)元\n",library.title, library.auther, library.value);
    printf("完成.\n");

    return 0;
}

 运行示例:

请输入书名:
Dog
请输入作者名:
Lisa
请输入价格:
12
《Dog》自 Lisa:(12.00)元
完成.

Process returned 0 (0x0)   execution time : 43.283 s
Press any key to continue.

 

 

 

 

二、结构体的具体使用

1.建立结构声明:

struct Book{//单词book为一个可选标记
    char title[MaxTitle];
    char auther[MaxAuther];
    float value;
};//结构声明
  • 可选标记:Book

 

2.定义结构变量

经过声明已经描述了结构如何组合,接下来“创建一个结构变量”。

int main(void){
    struct Book library;//定义结构变量
    //必须定义变量后方可运用.........

    return 0;
}

编译器创建一个变量library,编译器使用book模板为该变量分配空间,

例如:

struct Book a, b, *c;

ps:声明和定义的合并

声明结构和定义结构变量可以被合并成一步,如下(不需要使用标记):

struct { //无标记
    char title[MaxTitle];
    char auther[MaxAuther];
    float value;
}library;
只可使用一次,如果要反复使用见后面typedef。

 

3.初始化结构

前面的例子没有进行初始化,初始化见下:

struct Book library{
     "小狗钱钱",
     "博多舍费尔",
      34
};

如要进行指定初始化:

struct Book d { .value = 10.99 };

 

4.访问结构成员

gets(library.title);
//
scanf("%f",&library.value);

 

 

 

三、结构数组

把Book程序扩展成可以使用更多的书。

#include<stdio.h>
#define MaxTitle 41
#define MaxAuther 31
#define MaxBooks 100

struct Book{
    char title[MaxTitle];
    char auther[MaxAuther];
    float value;
};//建立结构体

int main(void){
    struct Book library[MaxBooks];//定义结构数组
    //......
}

这是表示每个成员:

library[0].value;

 

 

 

四、指向结构的指针

1.声明和初始化指针

//声明很简单
struct guy * him;

关键字struct ,结构标记 guy, 然后是一个*号,再加结构名。

ps:声明之后意味着him可以指向任何一个 guy 类型的结构。

 

如果 Tom 是一个guy类型的结构,可以:

him = &Tom;//表示地址使用取址符

而如果是个结构数组:

him = &Hengzhi[0];

 

2.如何用指针访问成员

以下是三种方法:

him->income is fellow[0].income if him == &fellow[0] //最常用的方法

follow[0].income == (*him) .income

barney.income == (* him) .income == him->income

 

posted @ 2019-07-26 23:46  山川湖海*  阅读(147)  评论(0编辑  收藏  举报