栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言小知识之结构体-1

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言小知识之结构体-1

结构体申明

int、float、char等是系统已经定义好的数据类型,但是在处理较复杂的问题上,基本的数据类型并不能满足要求,但C语言允许用户根据需要自己建立一些数据类型,用来定义变量。

首先申明最简单的结构体

struct Date
{
int month;
int day;
int year;
};

注意结构体后面的分号

struct是结构体的关键字,不能省略。Date是结构体名,用来区分不同的结构体。
struct和Date共同组成结构体类型的名字。
month、day、year称为结构体成员。

结构体可以属于另一个结构体的成员,如下:

struct Student
{
int num;
char name[20];
char sex;
int age;
struct Date birthday;
char addr[30];
};

结构体变量

上面只是对结构体的声明并没有定义结构体变量,所以内存中并没有为结构体变量分配空间,也无法对结构体变量赋值。
我们声明结构体是为了使用结构体变量实现我们需要的功能,仅仅申明结构体是没有任何作用的,定义结构体变量有如下三种方式:

方式一:先声明结构体类型,再定义该类型的变量

struct Student student1,student2;
struct Student结构体类型名,student1,student2结构体变量名。

方式二:在声明类型的同时定义变量

struct Student
{
int num;
char name[20];
char sex;
int age;
struct Date birthday;
char addr[30];
}student1,student2;
第二种方式与第一种方式的功能都是一样的,区别就是在声明结构体类型时已经想到了定义几个结构体变量以及结构体变量的名字。
如果后期需要增加该类型的结构体变量,可以用方式一继续增加变量,如下:
struct Student student3;

方式三:不指定类型名而直接定义结构体类型变量

struct
{
int a;
char b;
float c;
}ABC,BCD;
这种类型只能定义两个变量即ABC和BCD,无法后续增加该结构体类型的结构体变量。这种方式搭配typedef关键字在嵌入式应用的非常多。

结构体变量的初始化和引用

上面介绍了如何声明结构体类型和如何定义结构体变量,但实际使用中一定要对结构体变量赋值和初始化。

①在申明结构体类型时,定义变脸并对其付初值,如下:

struct Student
{
int num;
char name[20];
char sex;
}student1={2021,“LiMing”,‘M’},student2={2021,“LiMei”,‘W’};
定义了两个变量并对其赋初值;

②先申明结构体类型,然后在定义变量时进行赋初值,如下:

struct Student
{
int num;
char name[20];
char sex;
};
struct Student student1={2021,“LiMing”,‘M’};
struct Student student2={2021,“LiMei”,‘W’};

③只对需要用的成员初始化,其他不需要用的保持系统默认,如下:

struct Student
{
int num;
char name[20];
char sex;
};
struct Student student1 = {.neme = “LiMing”};
struct Student student2 = {.neme = “LiMei”};

没有初始化的成员变量,系统会默认对其赋值

数值型的成员系统会初始化为0;
字符型的成员系统会初始化为‘’
指针型的成员系统会初始化为NULL;

④在程序中对已经赋值的成员变量再次赋值,如下:

student1.num = 2022;
student1.name = “WangMei”;
"."是成员运算符,它在所有运算符的优先级中是最高的,可以将student1.num看作成为一个变量。

不能企图输出结构体变量名来达到输出结构体变量所有成员的值。

下面是错误做法:
printf("%sn",student1);
正确的做法是将结构体每一个成员变量单独输出,如下:
printf("%dn",student1.num);
printf("%sn",student1.name);
printf("%cn",student1.sex);

⑤如果结构图成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级成员。

struct Date
{
int month;
int day;
int year;
};
struct Student
{
int num;
char name[20];
char sex;
int age;
struct Date birthday;
char addr[30];
}student1,student2;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/457611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号