AutoLeaders控制组—C语言结构体学习笔记
枚举
枚举可以让一个单词来表示数字
写法为:
enum 枚举类型名字{名字0,…,名字n};//这句话要在函数以外使用
如:enum color{red,yellow,green};
这里红黄蓝为常量符号,类型为int
这样就表明枚举了三个量红黄蓝,枚举的第一个为0,第二个为1…
可以直接这些名字当数字用
若想要自己定义枚举的值,可以写成
enum color{red,yellow=5,green};
而此时,red=0,yellow=5,green=6;
每一个量都为前一个量加一
结构类型
结构为一系列变量的总和
struct date{
int month;
int day;
int year;
};
最后一定要有分号,类型可以不一样
这样就定义了一个结构date,里面有3个变量年月日
这一个可以写在函数里面,但只有这个函数可以使用
也可以写在函数外面,那就在这个结构类型声明的后面都可以使用
结构变量
每一个结构都可以有很多个结构变量,每个结构变量里面包含结构体里面的所有变量
struct date today;
today.month=01;
today.day=01;
today.year=2022;
today就是一个结构变量
也可以换一个写法
struct date today={07,31,2014};//这里第一个数就给第一个变量,第二个数给第二个变量
也可以只输入其中一两个变量
struct date today={.month=7,.year=2014};
这样day就默认为0
也可以在定义类型时就定义结构变量
struct date{
int month;
int day;
int year;
}p1,p2;
这里相当于有两个结构变量p1、p2,每一个变量都含有大括号里面的3个变量
结构运算
可以直接用一个变量p1=(struct point){5,10};//相当于p1.x=5;p1.y=10;
也可以直接让一个变量等于一个结构变量
p1=p2;//相当于p1.x=p2.x;p1.y=p2.y;
对结构变量取地址需要用&
.比&优先级高
结构与函数
把结构传入函数里与其他变量一样,传入的是值,在函数里无法改变函数外的结构的值
若想要从函数中改变函数外传进去的结构,可以用函数返回值返回
#include<stdio.h>
struct point{
int x;
int y;
};
struct point getstruct(void){
struct point p;
scanf("%d",&p.x);
scanf("%d",&p.y);
printf("%d,%d",p.x,p.y);
return p;
}
int main()
{
struct point a={0,0};
a=getstruct();
printf("%d,%d",a.x,a.y);
}
也可以使用指针指向结构体
struct point{
int x;
int y;
}my;
struct point *p=&my;
使用时有两种写法:
(*p).x=1;
p->y=2;
第二种更好
还可以定义结构变量为数组
#include<stdio.h>
struct time{
int hour;
int minutes;
int seconds;
};
int main()
{
struct time a[5]={
{11,59,59},{12,0,0},{1,29,59},{23,59,59},{19,12,27}//这里每一个大括号里都是一个数组单元
};
}
结构中的结构
struct time{
int hour;
int minutes;
int seconds;
};
struct day{
struct time d1;
struct time d2;
};
类型定义
typedef可以用来声明一个类型的名字,如
typedef int a;表面把a表示int,使用a可以和使用int一样使用
也可以声明结构类型,如有这样一个结构
struct time{
int hour;
int minutes;
int seconds;
};
可以使用typedef进行声明
typedef struct time{
int hour;
int minutes;
int seconds;
} date;
表明date就是上面那个struct定义的变量
然后想要表明使用这个结构只需
date d={1,1,2022};
就表明这个就是结构struct time