基础知识(5)"/>
c语言必备基础知识(5)
目录
结构体
1.特点
2.声明与定义
3.特殊的结构提成员变量
4.结构体成员变量初始化和访问
5.结构体赋值
6.结构体指针
7.结构体与函数,结构体嵌套结构体
联合体(共同体)
1.c语言联合
2.声明和定义联合
3.访问联合成员变量
结构体
1.特点
(1)结构是C语言一种派生类型,允许多种数据类型的变量组合起来,自定义成新的类型,这些不同类型的变量称为结构成员变量,变量名称称为结构成员标识符。
注:数组是将多个相同类型的变量组合起来,多个变量没有标识符,只能通过下标访
问。
结构特点:
·结构允许多个不同类型变量声明和定义
·结构也可以没有成员变量,空结构
·结构成员变量不能是函数类型、结构体本身和void等不完整类型
·结构成员变量可以包含指向自身的指针,也可以
包含其他类型结构体
·结构类型同样需要先声明、定义,再使用
2.声明与定义
(1)结构类型既可以单独声明和定义,也可以一并声明和定义,可以使用typedef自定义结构类型名称。
结构声明的基本语法:
struct 结构类型名 {
成员变量类型1 变量名称1;
成员变量类型2 变量名称2;
...
}结构类型变量名;
注:结构类型名和结构类型变量名可以相同,也可以不同。
例如:以下四种方式是等价的:
// 声明同时定义结构类型 struct student
{
char name[10];
int age;
char sex[4];
};
// 声明和定义结构变量stu1,stu2
struct student stu1,stu2;
// 先声明
struct student;
// 后定义
struct student{
char name[10];
int age;
char sex[4];};
//声明和定义结构变量
struct student stu1,stu2;
typedef struct student
{
char name[10];
int age;
char sex[4];
}STUDENT;
STUDENT stu1,stu2;
注:STUDENT是typedef自定义的新的类型名称,等价于structstudent结构类型
名。
// 同时声明定义结构类型和结构变量
// 省略结构类型名称,此时该匿名结构类型只能 struct
{
char name[10];
int age;
char sex[4];
} stu1,stu2
3.特殊的结构提成员变量
(1)指向自身的指针变量
结构类型可以包含指向指向自己的指针变量,不能包含自身。
注:这种特性可以用来建立链表、树型等复杂数据结构。
例如:
// 以下正确,指向自身的指针struct student {...struct student *s;};// 以下不正确,指向自身
struct student {... struct student s;
};
(2)指向其他结构体的成员变量
例如:
struct studentType1 {...
};struct studentType2{...struct studentType1 ss;}stu1,stu2;
4.结构体成员变量初始化和访问
成员变量通过点运算符 .访问。
例如:初始化一条学生记录,初始化并且打印出来。
#include <stdio.h>
struct student
{// 姓名char name[10];// 年龄 int age;// 性别char sex[4];// 昵称char *nickname;};int main(void){// 定义变量时直接初始化struct student stu1 = {"云中君",20,"男","风一般的男子"
};printf("%s\n",stu1.name);printf("%d\n",stu1.age); printf("%s\n",stu1.sex);printf("%s\n",stu1.nickname);return o;}
输出结果:
云中君
20
男
风一般的男子
5.结构体赋值
6.结构体指针
结构指针,是指向结构体变量的指针,结构指针使用通过->间接访问结构体成员变量。
例如:初始化一条记录,使用结构指针间接访问成员变量
#include <stdio.h>
struct student
{
// 姓名
char name[10];
// 年龄
int age;
// 性别
char sex[4];
// 昵称
char *nickname;
};
int main(void)
// 定义变量时直接初始化
struct student stu1 = {
"马超",
20,
"男",
"我喜欢的英雄"
};
// 定义结构体指针变量,并且初始化
struct student *sp = &stu1;
printf("%s\n",sp->name);
printf("%d\n",sp->age);
printf("%s\n",sp->sex);
printf("%s\n",sp->nickname);
return 0;
}
输出结果:
马超
20
男
我喜欢的英雄
7.结构体与函数,结构体嵌套结构体
(1) 结构体可以直接作为函数参数和返回值,结构体和普通变量一样,通过值传递传给函数参数,也可以作为整体返回值。
(2) 结构体指针也可以作为参数传递给函数,同样也可以作为函数返回值类型
联合体(共同体)
C语言联合
(1)联合,也称为联合体或共用体,语法和结构一样。与结构相比,结构体是有n个成员变量,就分配n个成员的存储空间,各个成员变量独立:联合是有n个成员变量,只分配1个成员变量(最大的成员变量)存储空间,各个成员变量共享相同的内存空间。
(2)特点:
·可以声明多个不同类型成员变量
·多个成员变量共享相同存储空间,修改任一变量
影响其它变量的值
声明和定义联合
union 联合类型名称{
变量成员类型1 变量名1;
变量成员类型2 变量名2;
...
}联合类型变量名
例如:
// 仅声明联合类型
test union test;
// 声明和定义联合类型
test union test
{
int i;
float f;
};
// 声明定义联合类型,并且声明两个联合变量
union test
{
int i;
float f;
}test1,test2;
更多推荐
c语言必备基础知识(5)
发布评论