《C/C++学习指南》语法篇—笔记 (十、结构体)
C/C++的基本数据类型:char/short/float/double 数组,指针
将基本的数据类型组合起来,形成新的数据类型 “ 自定义类型”
例如:定义一个新类型 student,成员变量有 name id grade
struct student
{
int id;
int grade;
char name[32];
};
结构体基本形式
基本形式: 其中,struct是关键字,TypeName为新类型的名称,Members是一系列成员变量。
struct TypeName
{
//Members
};
结构体使用
定义一个变量 student c;
定义数组:student cs[4];
指针:student* pc = &c ;
作为函数参数(传值,传址): void test(student c);
,void test(student* p);
作为返回值类型: student make(int id);
结构体变量定义和初始化
定义一个变量(不给初始值)
student a;
定义时初始化:用大括号将各个成员的初始值列出,按顺序列表。注意初始化时用大括号,末尾加分号结束。各字段的初始值要与该字段类型匹配。各初始值用逗号隔开,按顺序初始化。可以只初始化部分成员变量,也可以直接清0;结构体变量可以互相赋值,只支持 = ,不支持其他运算。
student a = {201823,2,"abc"};
student a = {201823};
student a = {0};
student as =
{
{201823,2,"abc"}.
{201824,2,"abd"},
{201825,2,"abf"}
}
student b = a;
结构体变量的访问
使用点号访问其成员:
student a;
a.id = 201867;
strcpy(a.name, "dfs");
指针
使用箭头 ->访问各成员变量,专门的这种方法,也可以用(*p).id
,不常用。
student a = {201823,2,"abc"}
student* p = &a;
printf("id:%d,grade:%d.name:%s \n",p->id,p->grade,p->name);
匿名struct
只定义变量,不定义类型(只想定义一个变量),该struct没有命名,编译器内部会分配一个名字,我们不知道
struct
{
char aa[128];
int dd;
}info;
结构体定义的几种方法
最前面的最常用正规,下面避免,匿名也避免
-
直接把变量定义在后面。
struct student { int a; char b[128]; }stu1,stu2;
-
C++与C差异,定义时候相同,使用时候需要加关键字
struct student { int a; char b[128]; }; struct student stu1; //定义变量时候也要加关键字struct