本文主要介绍以下内容:
- 关键字:struct
- 什么是C结构,如何创建结构模板,和结构变量
- 运算符. ,- >
- 如何访问结构的成员
- typedef简介
结构的引出:在C语言中有int,double,char,等数据类型,如果需要一组相同的数据来描述一个变量时可以使用数组。 但是这常常不能满足需求,如人是一个变量的话,需要名字,(字符串),年龄(整型),身高(浮点数)等数据来描述。这个时候就不能使用数组了,这就引出了结构,也就是说结构类似于数组,但是其中的变量可以不相同!结构有数组结构,有字符串结构,还有指向结构的指针…,所以结构十分地灵活多变。
-
**struct:**struct关键字用来声明或建立一个结构变量如:
struct fruit{ 结构成员; 结构成员; ..............; .......; ....; };//声明了一个名为fruit的结构类型,结构声明结束需要以分号结尾!!! struct fruit apple = { 结构成员, 结构成员, ............., ........, ..., };//建立一个结构类型为fruit名为apple的结构变量
-
结构成员的访问:结构变量使用.运算符访问成员,而指向一个结构的指针需要使用->
举个栗子O(∩_∩)O哈哈~首先我建立一个结构数组,和一个指向结构指针。先使用.运算符访问结构成员,再使用->运算符访问结构成员。具体使用如下:#include <stdio.h> #include <stdlib.h> # define NUM 2//预处理 # define NAME 20 struct people { char name[NAME]; int old; float height; };//声明一个为people的结构,用分号表示结束 int main(void) { int i; //struct people guy[NUM]; struct people guy[NUM] = { { "xiaojiang", 10, 120.5, }, { "SmallRivers", 20, 172.5, } };//定义一个为名为guy[NUM]的数组其中有两个people结构类型的变量,并为其赋值 struct people *p;//把p声明为一个指向people结构类型的指针 p = & guy[0];//指针指向guy[0] for (i = 0; i <= NUM; i++) printf("guy[%d].name[NAME] = %s\n", i, guy[i].name[NAME]); printf("guy[%d].old = %d\n", i, guy[i].old); printf("guy[%d].height = %f\n", i, guy[i].height); //使用.符号访问结构成员的值 printf("p->name[NAME] = %s\n", p->name[NAME]); printf("p->old = %d\n", p->old); printf("p->height = %f\n", p->height); //p为指针所以不能使用.访问结构成员应该使用符号-> p++;//指针指向下一个结构guy[1] printf("p->name[NAME] = %s\n", p->name[NAME]); printf("p->old = %d\n", p->old); printf("p->height = %f\n", p->height); //使用->访问结构成员 //所以guy[1].old = p->old = (*p).old //printf("Hello world!\n"); return 0; }
4. typedef: typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称,这方面与#define类似但是也有几处不同
- typedef有编译器解释,#define有预处理器解释
- #与define,typedef创建的符号只受限与类型,不能用于值的定义
typedef使用如下:
typedef long double lb;
然后使用lb来定义一个long double 类型的变量:
lb num1, num2;
这样似乎看来给一个类型定义一个别名似乎完全多此一举。但是在定义一些比较复杂的类型的时候却十分有用:
typedef char (*function())[10];
首先把function()声明为一个函数,该函数返回一个指针,该指针指向含有10个char类型的数组
还可以typedef用于结构:
typedef struct fruit{
char name[10];
float price;
} FRUIT;
接下来就可以使用FRUIT来建立一个结构了
另外用typedef来建立一个结构时可以省略结构的标签如下:
typedef struct{
char name[10];
float price;
} FRUIT;
这样定义与上面完全一样
结构FRUIT使用方法如下与原来完全相同:
struct FRUIT Apple{
name[10] = apple,
price = 5.00
};