做门户网站代码质量方面具体需要注意什么,蚌埠网站建设文章,南宁网站建设是什么,深圳建筑工程交易服务主页C语言 文章目录 C语言前言一、什么是结构体二、什么是联合体三、结构体和联合体的区别 前言 一、什么是结构体
在C语言中#xff0c;结构体指的是一种数据结构#xff0c;是C语言中聚合数据类型的一类。结构体可以被声明为变量、指针或数组等#xff0c;用以实现较复杂的数…C语言 文章目录 C语言前言一、什么是结构体二、什么是联合体三、结构体和联合体的区别 前言 一、什么是结构体
在C语言中结构体指的是一种数据结构是C语言中聚合数据类型的一类。结构体可以被声明为变量、指针或数组等用以实现较复杂的数据结构。结构体同时也是一些元素的集合这些元素称为结构体的成员且这些成员可以为不同的类型成员一般用名字访问。也就是说结构体是由多种元素所构成的数据结构。
struct 结构体
{ 任意类型 任意变量 任意类型 任意变量 ……}注意这不是定义变量而是自定义一种类型而已。如
struct student
{
char name[10];//学生姓名
int height;//学生身高
bool sex;//学生性别 假设0表示女1表示男。
}类型定义好以后则可以定义该类型的变量
struct student ab// struct可以省略。
可以在定义结构体变量的时候赋值。如
student a”q”,172,1,b{“x”,172,1};也可以在定义结构体变量以后赋值,但注意不能再用。如
student ab;a”q”,172,1,b{“x”,172,1};//这是错误的。应该是
a.nameq;
a.height172;
a.sex1;可以在定义结构体类型的时候同时定义结构体变量并赋值。
struct student
{
char name[10];//学生姓名
int height;//学生身高
bool sex;//学生性别 假设0表示女1表示男。
} aq,172,1,b{x,172,1};访问结构体成员要用直接成员运算符“.”或间接成员运算符“-”。
对于结构体变量访问其中的成员采取“结构体变量.成员”的形式而对于结构体指针访问它所指向的结构体变量中的成员则采取“结构体指针-成员”形式。
#include stdio.h// 定义一个结构体类型
typedef struct {int age;float height;
} Person;int main() {// 定义一个结构体变量Person person1;// 定义一个结构体指针Person *person2;// 为结构体变量赋值person1.age 25;person1.height 175.5;// 为结构体指针分配内存并赋值person2 (Person *)malloc(sizeof(Person));if (person2 NULL) {printf(Memory allocation failed\n);return 1;}person2-age 30;person2-height 180.0;// 通过结构体变量访问成员printf(Person1 Age: %d\n, person1.age);printf(Person1 Height: %.2f\n, person1.height);// 通过结构体指针访问成员printf(Person2 Age: %d\n, person2-age);printf(Person2 Height: %.2f\n, person2-height);// 释放分配的内存free(person2);return 0;
}
二、什么是联合体
联合体也是一种自定义的复合类型它可以包含多个不同类型的变量。这些变量在内存当中共用一段空间。这段空间的size就是各变量中size最大的那个变量。
union myunion
{int num1; double num2; float num3;};定义了一个联合体类型myunion。 myunion ab//定义了两个myunion型变量。也可以在定义联合体类型的时候定义联合体变量。如
union myunion
{
int num1;
double num2;
float num3;}a,b;a占用的空间有多大呢Sizeof(a)结果为8即myunion占用8个字节和double型变量相同。 注意任一时刻只能访问结构体里面的一个变量。
联合体Union与结构体相似但它们的区别在于联合体中只能同时存储一个成员的值。这些成员共享同一个物理存储空间也就是说一个联合体的大小等于它最大的成员变量所占据的空间。
#include stdio.h// 定义一个联合体类型
typedef union {int i;float f;char c;
} Data;int main() {// 创建一个联合体变量Data data;// 向联合体的 int 成员赋值data.i 10;printf(Data.i %d\n, data.i);// 向联合体的 float 成员赋值data.f 3.14;// 注意这会覆盖之前存储在 i 中的值printf(Data.f %.2f\n, data.f);// 向联合体的 char 成员赋值data.c A;// 注意这会覆盖之前存储在 f 中的值printf(Data.c %c\n, data.c);// 打印联合体的大小printf(Size of union Data %zu bytes\n, sizeof(data));return 0;
} 三、结构体和联合体的区别
1.结构体与联合体虽然都是由多个不同的数据类型成员组成的但不同之处在于联合体中所有成员共用一块地址空间即联合体只存放了一个被选中的成员而结构体中所有成员占用空间是累加的其所有成员都存在不同成员会存放在不同的地址。在计算一个结构型变量的总长度时其内存空间大小等于所有成员长度之和需要考虑字节对齐而在联合体中所有成员不能同时占用内存空间它们不能同时存在所以一个联合型变量的长度等于其最长的成员的长度。 2.对于联合体的不同成员赋值将会对它的其他成员重写原来成员的值就不存在了而对结构体的不同成员赋值是互不影响的。