结构类型:
结构的创建
struct date
{
int year;
int month;
int day;
}p1,p2;
int main()
{
struct date date1;
}
结构的初始化:
struct date
{
int year;
int month;
int day;
}p1,p2;
int main()
{
struct date date1 = { 2,6,8 };//顺序给结构里面的变量赋值
struct date date2 = { .year = 7,.day = 0 };//直接给某个值赋值,没有初始化自动为0
return 0;
}
结构指针:
{
struct date date1 = { 2,6,8 };
struct date* p = &date1;//必须使用&运算符,结构的名字并不是地址
return 0;
}
给结构体赋值,无法通过直接写GET函数来进行赋值
#include<stdlib.h>
#include<string.h>
struct date
{
int year;
int month;
int day;
};
struct date getstruct()
{
struct date p;
scanf("%d", &p.year);
scanf("%d", &p.month);
scanf("%d", &p.day);
printf("%d %d %d\n", p.year, p.month, p.day);
return p;
}
void output(struct date p)
{
printf("%d %d %d", p.year, p.month, p.day);
}
int main()
{
struct date date1 = { 0,0,0};
date1 = getstruct();//通过函数返回值的方法来赋值
output(date1);
return 0;
}
指向结构的指针
(关于函数返回类型是指针的相关补充)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct date
{
int year;
int month;
int day;
};
struct date* get(struct date *p)
{
scanf("%d", &p->year);
scanf("%d", &p->month);
scanf("%d", &p->day);
return p;
}
void output(struct date p)
{
printf("%d %d &d", p.ear, p.month, p.day);
}
int main()
{
struct date date1 = { 0,0,0};
struct date* p = &date1;
p->day;//直接指向结构变量中成员
get(&p);
output(*get(&p));//利用取值号*来将get()函数返回的结构体指针里的变量取出
return 0;
}
结构数组:
struct date Date[100] = { {2,5,7},{2,9,0} };
结构体中嵌套结构体:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct date
{
int year;
int month;
int day;
};
struct conpany
{
struct date x;
struct date y;
};
int main()
{
struct conpany a, * b;
b = &a;
/* 此时如下四种形式相等
a.x.year
b->x.year
(a.x).year
(b->x).year
但是没有b->x->year,因为x不是指针,不能用->*/
struct conpany math[] = { {{2,7,7},{5,8,0}},{{6,9,0},{5,7,8}}};//含有嵌套结构体的结构体数组
return 0;
}
自定义数据类型:typedef 声明一个已有数据类型的别名
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
int year;
int month;
int day;
}DATE;//简化名字,把一个结构体命名为DATE,简化了struct的书写
typedef int good;//将int给与一个good的别名
int main()
{
DATE a = { 7,8,9 };
good b = 8;
return 0;
}