云计算百科
云计算领域专业知识百科平台

C语言--构造数据类型

1、结构体

   1.结构体的定义与初始化

        结构体类型定义:

struct 结构体名{
变量类型1 变量1名,
变量类型2 变量2名,
变量类型3 变量3名,

};
//例:
struct student{
char name[32],
char sex,
int age,
int score,
};

        结构体变量定义:   

存储类型 变量类型 变量名;
(auto) struct student stu;

        结构体初始化

                没有被赋予初值的变量默认为0   

//全部初始化
struct student stu ={
{"zhangsan",'m',18,100}
};
//局部初始化
struct student stu = {
.name = "zhangsan",
.score = 100,
};

2.结构体变量的访问

        结构体访问变量的类型最终由结构体成员的变量决定

运算符 功能 表达形式
. 结构体变量类型访问成员变量

stu.name = "zhangsan"

stu.sex = 'm'

-> 结构体指针变量访问成员变量

stu -> name = "zhangsan"

stu -> sex = 'm'

 

3.结构体的存储

        结构体成员必须存储在自身大小整数倍的空间内

        结构体所占存储空间为最大成员所占空间大小的整数倍

        以下结构体为例,说明该结构体存储所占空间大小为1{char} + 2(short) + 1(不存放数据)(必须存储在自身大小整数倍的空间内) +4(int)= 8

struct text{
char a;
short b;
int c;
};

4.结构体数组

//结构体数组定义格式
数据类型 数组名[元素个数];

//结构体数组的初始化
//全部初始化
struct student s[3] = {
{"zhangsan", 'm', 19, 100},
{"lisi", 'f', 18, 90},
{"wanger", 'm', 19, 60},
};

//局部初始化
struct student s[3] = {
[1] = {
.name = "zhangsan",
.score = 90,
},
};

5.结构体的参数传递

        值传递、地址传递与结构体数组参数传递

//值传递
void fun(struct student tmp);

//地址传递
void fun(struct student *ptmp);

//结构体数组传参 len为元素个数
int fun(struct student *pstu, int len);

2、共用体(联合体)

  • 结构体成员变量空间是独立的
  • 共用体每个变量空间是共享的
  • 共用体所占空间大小等于共用体最大成员所占空间大小
        数据类型定义: 

union 共用体名{
变量类型1 变量名1,
变量类型2 变量名2,
变量类型3 变量名3,

};

        内存大小端:
概念 含义
内存小端 高地址存放高位数据,低地址存放低位数据的存储方式
内存大端 高地址存放低位数据,低地址存放高位数据的存储方式

        利用共用体判别内存大小端   

union s { //共用体共用存储空间
char a; //char类型位于低位
int b;
};
int main(void)
{
union s s1;
s1.b = 1;

if(s1.a)
printf("小端存储\\n"); //低地址存低位数据
else
printf("大端存储\\n"); //高地址存放高位数据
return 0;
}

3、枚举

  • 作用:定义一些枚举常量,在该枚举类型下,只能取得枚举成员中的变量
  • 枚举常量均为int类型,且第一个枚举常量的值默认为0,后续枚举常量的值总是前一个常量的 值+1
  • 枚举常量可以在定义时被赋值
        定义形式:

enum 枚举类型 {
常量1,
常量2,
常量3,

};

        枚举的运用:

enum weekday {
MONDAY = 1,
TUESDAY,
WEDNESDAY,
THURDAY,
FRIDAY,
SATURSDAY,
SUNDAY,
};

int main(void)
{
enum weekday day;

printf("请输入今天是周几:\\n");
scanf("%d", (int *)&day);

switch (day)
{
case MONDAY:printf("尾号1和6限行\\n");break;
case TUESDAY:printf("尾号2和7限行\\n");break;
case WEDNESDAY:printf("尾号3和8限行\\n");break;
case THURDAY:printf("尾号4和9限行\\n");break;
case FRIDAY:printf("尾号5和0限行\\n");break;
case SATURSDAY:
case SUNDAY:
default:printf("不限行\\n");break;
}

return 0;
}

赞(0)
未经允许不得转载:网硕互联帮助中心 » C语言--构造数据类型
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!