C语言基础--结构体
结构体的声明:
如果有一种类型可以同时管理多个数据,那会是非常令人愉悦的一件事情。C语言提供了这样的一种功能可以允许声明一个结构体类型,基本形式如下:
struct date{
int year;
int month;
int day;
};
struct是关键词(key word),date是结构体类型名,year, month和day是结构体的成员变量。声明一个结构体变量的基本形式如下:
struct date myDate;//声明一个结构体变量
myDate这个结构体变量就会拥有三个int型成员变量:year, month和day。
结构体初始化:
首先需要了解如何访问结构体重的成员变量:通过myDate.year, myDate.month以及myDate.day来访问结构体meDate的成员变量。
1.整体赋值:
在声明的时候可以直接给三个成员变量赋值,struct date myDate = {1, 2, 3};赋值是按照结构体成员变量的顺序进行的也就是说可以等效于这样的初始化方式:myDate.year = 1; myDaty.month = 2; myDate.day = 3;
2.选择性赋值:
myDate = {1,2}; 赋值前两个变量而不给第三个成员变量赋值; myDate = {.day = 3};只给第三个成员变量赋值。这两种写法都是允许的。
3.符合字面量:
在单个语句中C语言是允许为结构体变量指定一个或者多个值,假定today已经被声明为date类型的结构体,那么我们可以这样做:
today = (struct date){1,2,3};或者还可以这样:
today = (struct date){.year = 1,day = 3, month = 2};
结构体数组:
我们可以定义结构体数组:
struct date dateArray[10];这句话表明了一个date结构体数组,数组中的每一个元素dateArray [0]~dateArray[9]都是date类型的结构体变量。
包含结构体的结构体:
先定义两个结构体:
struct date {
int year;
int month;
int day;
};
struct time{
int hour;
int minute;
int second;
}
定义一个结构体包含这两个结构体
struct date_add_time{
struct date sdate;
struct time stime;
};
现在已经定义好了这个包含结构体的结构体,其语法格式与单结构体是相同的,若要引用(访问)date_add_time的sdate结构体只需要 :
struct date_add_time date_time;
date_time.sdate;
如果需要访问sdate中的成员变量,只需要:
date_time.sdate.year = 1;
date_time.sdate.month = 2;
date_time.sdate.dat = 3;
我们还可以在定义的时候进行初始化:
struct date_add_time date_time = { {1,2,3},{4,5,6} };
或者:
struct date_add_time date_time = { .year = 1, .month = 2, day = 3 };
结构体变体:
struct date{
int year;
int month;
int day;
} myDate = {1,2,3};
这种方式是可以的。后面说道typedef的时候用的就是这样的格式。如果在定义结构体的时候同时声明了所有结构体变量那么就可以省略结构体的名字:
struct{
int year;
int month;
int day;
}myDate[10];
这样定义省略了结构体名称(结构体类型名称),因为给出了所有需要的结构体变量——即这一个数组中包含的10个元素(每一个元素都是一个结构体变量)。