结构体(第十四章 )
※目录:
一、结构体简单运行实例
二、结构体具体使用
- 声明
- 定义
- 初始化
- 访问
三、结构数组
四、指向结构的指针
- 声明初始化
- 访问
一、结构体最简单的运行实例
结构体是描述结构如何组合的主要方法。
以下为创建图书目录的一个简单实例:
#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:声明和定义的合并
声明结构和定义结构变量可以被合并成一步,如下(不需要使用标记):
只可使用一次,如果要反复使用见后面typedef。struct { //无标记 char title[MaxTitle]; char auther[MaxAuther]; float value; }library;
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