1——结构体类型的定义
用结构体描述一个学生:
struct stu//定义一种结构体类型,不占用内存空间
{
char name[20];
short age;
char tele[11];
char sex[5];
};
//struct--结构体关键字
//struct stu--结构体类型
利用typedef关键字来重定义结构体类型:
typedef struct stu
{
char name[20];
short age;
char tele[11];
char sex[5];
}stu;
//把结构体类型struct stu重定义为stu
用结构体类型定义结构体变量:
int main()
{
struct stu s1;
stu s2;
//两种结构体类型分别定义结构体变量
return 0;
}
2——结构体的初始化
还用上面那个例子,用{}对结构体进行初始化,
stu s2={"张三","20","15648254652","男"};
//初始化:结构体类型+结构体变量+初始化;
定义的结构体里也可以含其他结构体:
struct s
{
int a;
char c;
char arr[20];
double d;
};
struct t
{
char ch[10];
struct s s1;//结构体里包含其它结构体
char *pc;
};
此时再对该结构体进行初始化;
char arr[]={"hello world\n"};
struct t t1={"hehe",{100,"w","abcdefg",3.14},arr};
3——结构体的成员访问
结构体的成员可以是不同类型的变量,成员可以是标量,指针,数组,也可以是其他结构体。
. 和-> 是结构体变量访问成员操作符
用法为: 结构体变量 . 结构体成员
结构体地址(指针)->结构体成员
4——结构体传参
先定义结构体再初始化,再定义两个函数
typedef struct stu
{
char name[10];
short age;
};
int main()
{
stu s={"张三",20};
return 0;
}
直接传结构体:
void print1(stu tmp)
{
printf("%s", tmp.name);
printf("%d", tmp.age);
}
int main()
{
stu s = { "张三",20 };
print1(s);
return 0;
}
直接传结构体的地址:
void print2(stu* ps)
{
printf("%s", ps->name);
printf("%d", ps->age);
}
int main()
{
stu s = { "张三",20 };
print2(&s);
return 0;
}
在实际写代码结构体传参时,首选传结构体的地址,可以节省空间和效率,直接传结构体可能会占用较大内存导致运行效率下降