C语言学习入门 (七) 结构体和枚举
来源:互联网 发布:windows 9 编辑:程序博客网 时间:2024/06/06 07:35
结构体
它允许内部的元素是不同类型的
结构体的定义
//结构体类型:
struct Person
{
char name[20]; //char *name;
int age;
float weight;
};
//定义一个结构体变量,定义变量时才分配存储空间
struct Person person; //与类型定义一起使用
struct Student { //结构体类型与变量同时定义
char *name;
int age;
} stu;
struct { //省略类型,结构体变量名为stu
char *name;
int age;
} stu;
结构体的注意点
1.不允许对结构体本身递归定义
如下做法是错误的,注意第3行
1 struct Student {
2 int age;
3 struct Student stu;
4 };
2.结构体内可以包含别的结构体
3.结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按定义的顺序依次排列
结构体的初始化
1.
struct Person
{
char name[20];
int age;
float weight;
};
struct Person person = {"a",28, 55.5f};
2.
struct Person
{
char name[20];
int age;
float weight;
} person = {"a",28, 55.5f};
只能在定义变量时 初始化
结构体的使用
person.age =22;// 这里的.运算符 优先级最高
//person.name = "cc";//这样是不可以的,会报类型未分配的error
malloc(sizeof(per1)+20);//分配内存给name,name为20长度
strcpy(per1.name, "ffaff");//用这种方式给name赋值
struct Person p1 = {"a",28, 55.5f};
struct Person p2 = p1;
结构体数组
跟结构体变量一样,结构体数组也有3种定义方式 ……person[5];
初始化与数组类似 struct Person person = { {}, {}, {} };
struct Student1 { int grade;};struct Student1 stu1[3];//先定义结构体类型,再定义变量struct Student2 {//直接在变量后声明数组 int grade;}stu2[3];struct {//省略结构体名字,并声明为数组 int grade;}stu3[3];
结构体作为函数参数
将结构体变量作为函数参数进行传递时,其实传递的是全部成员的值,
也就是将实参中成员的值一一赋值给对应的形参成员。因此,形参的改变不会影响到实参。//值传递
指向结构体的指针
* 结构体指针变量的定义形式:struct结构体名称 *指针变量名
* 有了指向结构体的指针,那么就有3种访问结构体成员的方式
- 结构体变量名.成员名
- (*指针变量名).成员名//因为 .优先级高,,所以要括起来
- 指针变量名->成员名
void processStruct()
{
printf("p-name:%s\n",person.name);
struct Person *per = &person;
printf("p-age:%d\n", (*per).age);
printf("p-weight:%.2f\n", per->weight);
}
枚举
它可以用于声明一组常数。当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型
枚举类型的定义
enum Season {spring, summer, autumn, winter};
枚举变量的定义
跟结构体一样,有3种方式定义枚举变量
>enum Season {spring, summer, autumn, winter};
enum Season s;
>enum Season {spring, summer, autumn, winter} s;
>enum {spring, summer, autumn, winter} s;
枚举使用的注意
> C语言编译器会将枚举元素(spring、summer等)作为整型常量处理,称为枚举常量。
> 枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1。
enum Season {spring, summer, autumn, winter};
也就是说spring的值为0,summer的值为1,autumn的值为2,winter的值为3
>也可以在定义枚举类型时改变枚举元素的值
enum season {spring, summer=3, autumn, winter};
没有指定值的枚举元素,其值为前一元素加1。也就说spring的值为0,summer的值为3,autumn的值为4,winter的值为5
enum Season
{
spring, summer =18, fall, winter
} season;
void processSeason()
{ season =spring;//等价于 season = 0; //默认从0开始
season = 9;
season = winter;//等价于 season = 20;
printf("season= %d\n",season);
int *p = &season;
printf("p=%d\n", *p);
}
枚举数组、指向枚举的指针(跟结构体类似)
//枚举数组 定义方式与结构体数组类似也是三种方式 printf("枚举数组sea3_ary[1]=%d\n",sea3_ary[1]); //指向枚举的指针 enum Season4 *p = &sea2_ary[0];// printf("%d\n", *p=autumn4); enum sea3_ary *q = &sea3_ary[0];//匿名枚举 没有指定类型,这句编译器居然通过了 // printf("%d\n", *q=autumn4); //指针不能识别类型sea3_ary 这句报错枚举遍历
//遍历枚举 for (int i=spring; i<=winter; i++) {//只能遍历 printf("枚举元素:%d \n", i); } enum Season2 *s = &sea2; for (int i = 0; i <=4; i++) { printf("枚举sea2元素:%d \n", *(s+i)); //跟数组不一样,不是连贯存储的,所以用指针遍历无效 }
- C语言学习入门 (七) 结构体和枚举
- C语言学习入门 (八) 结构体和枚举
- c语言学习笔记之结构体和枚举
- C语言中的结构体和枚举
- C语言--结构体和枚举
- C语言中的结构体和枚举
- C语言(七)枚举
- C语言结构体(七)
- 黑马程序员——C语言学习之结构体和枚举
- C语言学习笔记-结构体、共用体、枚举
- 黑马程序员 C语言------结构体 枚举学习
- 【C语言学习笔记】结构体、枚举、预处理指令
- c语言学习笔记之结构体,枚举
- C语言学习笔记10-结构体、枚举、联合体
- c语言的结构体,共用体和枚举
- 黑马程序员------C语言-----结构体和枚举
- C语言的结构体、联合和枚举
- C语言DAY 13 - 结构体和枚举
- 敏捷测试过程的度量标准---请记住,把度量作为一种激励的手段而不是打击士气的方式
- 不是技术牛人,如何拿到国内IT巨头的Offer
- nutch v1.9源码分析(3)——nutch基本爬取流程
- 正则表达式基本语法
- hdu1003 最大连续子序列和
- C语言学习入门 (七) 结构体和枚举
- sobel算子(转)
- 动态规划之最大子段和
- [Perl] Find Shell on your Wordpress site
- ajax跨域请求的解决方案
- emacs 多窗口
- HTTP代理协议
- linux基础常用命令-第二课
- next_permutation函数