[c语言基础]构造函数,结构体学习使用

[c语言基础]构造函数,结构体学习使用

构造数据类型

基本数据类型:short int long char float void

指针类型

构造数据类型 节后提 共用体 枚举

1.结构体

int num / char ch / fioat f

如果没有办法使用当前类型描述,但是想描述学生这一类就要使用结构体进行

首先学习如何声明结构体

struct 名称

{

数据类型:成员1

成员1 成员2 ......//需要的基本数据类型(也就是已经有的数据类型int double float .....)

};

声明struct 名称 的一种结构体类型 是一种数据类型

比如构造一个年月

struct date

{

int year;

int mon;

int day;

};

struct datetime
{
struct date mdate;
struct time mtm;
};
struct datetime
{
truct date
{
int year;
int mon;
int day;
}mdate;
struct time
{
int hour;
int min;
int sec;
}mtm;
};

1.结构体的嵌套

struct datetime

{

int date

}

注意

声明结构体时候,结构体成员间用‘;’

结构体之间‘;’隔开

struct 后面的名称可以省略,省略后一个结构体

2.结构体变量定义

int num

struct nums定义一个s的变量

结构体类型 名称

struct num

{

int age;

int sorce;

int hight

} str;定义的变量名称

声明结构体类型的同时,定义了一个变量,变量的变量名mydate

3.结构体的初始化

全部初始化 strcut date mydat={2025,8.6}

部分初始化 strcut time time

truct date mydate =
{
//.year = 2024,
//.day = 6,
};

}

当我们在部分初始化进行定义的时候如果晒定义一个那么我们应该加一个点表示访问该元素

4.结构数据成员的访问

1.通过结构体变量访问结构体成员

结构变量名. 成员1;

结构变量名.成员2;

表达式的结果取决于成员的数据类型

mydate,year;

2.通过结构体指针访问结构体成员

结构体指针-》成员1

结构变量变量名.成员1;表达式的结果取决成员的数据类型。

5.结构体的储存模式

结构体对齐原则:
1. 结构体成员在内存中存储时,成员必须存储在自己字节大小的整数倍位置;
2. 结构体整体占的内存大小,是结构体中最大成员字节数的整数倍。
注意:
1. 在不同位系统下,相同结构体在内存中占的字节空间可能不一样
原因:64位系统long/指针类型占8字节;32位系统long/指针类型占4字节。
2. 可以强制让结构体按指定字节数对齐。

#pragma pack(1) //强制结构体按1字节对齐
struct s
{
int a; //4
char b; //1
int c; //4
};
#pragma pack(

6.结构体作为函数进行参数的传递

如果再被调函数中修改结构体变量,则传递结构变量的地址

如果在函数中使用主调函数的结构体变量,可以传递值,也可以传递地址

7. 结构体数组

struct stu 数组名【元素个数】

struct stu 数组名元素 【元素个数】={{},{},{}};

数组名【下标】类型的华就是我们自定义的变量结构

8.共用体/联合体

1.语法

union 名称

{

数据类型,成员1

数据类型,成员2

};

1.共用体中所有成员公用一块空间;始终以最大变量的sizeof占用内存

2.共用体中字节数大小和

内存大小端

小端:内存的高地址存储高字节位,内存的地地址存储低字节位;

大端;内存的搞地质存储低字节位,内存的纸质存储的高字节位;

9.枚举

enum 没就相当于是全局定义的一个宏

每个里面都是整形常量,对已经定义部分可以进行按需递增(主要四要增强代码可读性)

1.枚举中都是整型常量,不需要写数据类型

2.枚举常量根据行业规范一般都是大写

3.没居中枚举常量,类似于整形符号常量,可以直接被引用

4.枚举中的常量用逗号隔开

5.枚举中如果没有给定常量,则默认从0开始

如果某个常量给赋值后,紧挨着后面的常量依次加一

一,枚举变量

enum 名称 变量名; 枚举变量是的枚举类型的整形

typedef关键字;为已有的 数据类型 进行 重命名

typedef struct stu stu_s 重新命名