复习第八课 C语言-结构体,其他

目录

【1】结构体

【2】typedef

【3】结构体数组

【4】结构体指针

【5】结构体大小

【6】共用体

【7】枚举

【8】存储类型


【1】结构体

1. 定义:

结构体就是一种用户自定义的新数据类型,在结构体中可以包含若干个相同数据类型或不同数据类型的成员变量,组合在一起进行描述

2. 格式:

struct 结构体名
{
	数据类型  变量1;
	数据类型  变量2;
	...
};

例:
struct student
{
	int id;
	float score;
};
 
  

3. 结构体变量:

定义格式:struct 结构体名 变量名;

1)先定义结构体,后定义变量
struct student
{
	int id;
	float score;
};
struct student stu;

2)在定义结构体的同时定义结构体变量
struct student
{
	int id;
	float score;
}stu;

3)缺省结构体类型名进行定义
struct 
{
	int id;
	float score;
}stu;
 
  

4. 赋值:

1)定义的同时用{}赋值
struct student
{
	int id;
	float score;
};
struct student stu={1,98.6};

2)先定义,后复制,需要对每个成员变量单个赋值
struct student
{
	int id;
	float score;
};
struct student stu;
stu.id = 1;
stu.score=56.3;

3)点等法赋值
struct student
{
	int id;
	float score;
};
struct student stu={
	.id = 1,
	.score=55,
};
 
  

5. 访问成员变量:

通过.进行访问:结构体变量名.成员变量名

练习:

创建一个名为student的结构体,包含姓名,学号,班级,分数,(数据类型自己定义),从终端输入学生的信息并打印。

#include
struct student
{
    char name[32];
    int id;
    int class;
    float score;
};

int main(int argc, char const *argv[])
{
    struct student stu;
    scanf("%s %d %d %f",stu.name,&stu.class,&stu.id,&stu.score);
    printf("%s %d %d %.2f\n",stu.name,stu.class,stu.id,stu.score);
    return 0;
}
 
  

【2】typedef

1)定义结构体同时重定义
typedef	struct student
{
	char name[32];
	int id;
	int class;
	float score;
}STU;
STU stu;//定义一个结构体变量stu

2)先定义结构体,后重定义
struct student
{
	char name[32];
	int id;
	int class;
	float score;
};
typedef struct student STU;
STU  stu1;
 
  

【3】结构体数组

1. 格式:

1)定义结构体的同时定义结构体数组
struct student
{
    char name[32];
    int id;
    int class;
    float score;
}stu[5];

2)先定义结构体后定义
struct student
{
    char name[32];
    int id;
    int class;
    float score;
};
struct student stu[5];
 
  

2. 赋值:

1)定义数组同时赋值
struct student
{
    char name[32];
    int id;
};
struct student stu[2]={{“lisa”,1},{"yaya",2}};

2)先定义后赋值,需要对每个结构体元素的成员变量单独赋值
struct student
{
    char name[32];
    int id;
};
struct student stu[2];
stu[0].id=1;
strcpy(stu[0].name,"lisa");

 

结构体数组大小:sizeof(struct 结构体名) *个数

【4】结构体指针

1. 概念:

指向结构体变量的指针

2. 格式:

struct   结构体名  * 指针名;
struct  student
{
	int id;
	float score;
}stu1;
struct  student * p = &stu1;
 
  

3. 赋值:

指针名->成员变量名
p->id = 1;
p->score = 96.5;

4. 大小:

sizeof(p)=4,本质是指针

总结:

1. 不能将一个结构体变量作为一个整体来使用,只能对结构体变量中的各个成员变量分别使用

2. 如果成员变量又属于另一种结构体类型,则要用若干成员运算符(.)一级级找到最低级的成员

3. 对于成员变量的操作可以和其他普通变量一样进行各种运算

4. 在数组中,数组是不能彼此赋值的,但是结构体变量可以

【5】结构体大小

sizeof(struct 结构体名)
	
struct std
{
	char b;
	short c;
	double d;
};
1)字节对齐原则
找结构体成员最大数据类型和4进行比较,按照字节数小的为单位开辟空间

2)节省空间原则
减少空间浪费
 
  

【6】共用体

1. 格式:

union 共用体名
{
	成员列表;
};

2. 定义共用体变量:

union 共用体名 共用体变量名;

union value
{
	int a;
	char ch;
};

union value  val;
val.a = 1;
val.ch = 'a';

3. 特性:

1) 共用体所有成员变量共用一块地址空间

2) 赋值以最后一次赋值为实际数据

3) 共用体的大小成员中类型最大的数据的大小

【7】枚举

1. 定义:

一种用户自定义数据类型,用来声明一组常数

2. 格式:

enum  枚举类型名
{
	valuename1,
	valuename2,
.....
};

注意:枚举没有赋初值为0,后面依次加1

【8】存储类型

1.auto	自动型 用来修饰局部变量,默认省略
2.static 静态型,可以修饰变量和函数
修饰变量:
1.变量的存放位置在静态区(全局区)
2.生命周期为整个程序
3.限制作用域:
	修饰局部变量,和普通局部变量作用域没有区别,但是可以延长生命周期
	修饰全局变量,限制在本文件中使用
4.只初始化一次,未赋初值时为0
    修饰函数:
	static修饰的函数只能在本文件中使用
3.extern 外部引用
	通过extern引用其他文件的全局变量或函数
4.register 寄存器类型
	由于寄存器数量比较少,在申请不到空间时和auto一样
 
 

你可能感兴趣的:(复习知识,c语言,开发语言)