目录
结构体
结构体的声明
结构成员的类型
结构体变量的定义和初始化
结构体成员的访问
结构体传参
结构体
结构体的声明
比如描述一个学生
struct Stu //Stu - 结构体标签 struct Stu - 结构体类型
{
//成员变量
char name[20];
short age;
char tele[12];
char srx[5];
}; //结构体声明,是一个语句,需要加";"
typedef的应用
typedef struct Stu
{
char name[20];
short age;
char tele[12];
char srx[5];
}Stu;//typedef - 将类型struct Stu定义到Stu上
结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体。
?结构体变量的定义和初始化
有了结构体类型,定义变量其实很简单。
代码演示
代码1
struct Stu
{
char name[20];
short age;
char tele[12];
char srx[5];
}/*s1,s2,s3*/; //可以直接创建变量,s1,s2,s3为全局变量
int main()
{
struct Stu s1 = { "张三",20,12345667899,"男" };//创建结构体变量
return 0;
}
代码2?
#include<stdio.h>
struct S
{
int a;
char c;
char arr[20];
double d;
};
struct T
{
char ch[10];
struct S s;
char* pc;
};
int main()
{
char arr[] = "hello";
struct T t = { "haha",{1,'a',"abc",3.14},arr};
return 0;
}
结构体成员的访问
访问方式
.? ? 结构体.结构体成员
->? 结构体->结构体成员
代码演示?
#include<stdio.h>
typedef struct Stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}Stu;
int main()
{
Stu s = { "张三",20,"12345667899","男"};
//打印结构数据
//访问1
printf("name: %s\n", tmp.name);
printf("age: %d\n", tmp.age);
printf("tele: %s\n", tmp.tele);
printf("sex: %s\n", tmp.sex);
//访问2
printf("name: %s\n", ps->name);
printf("age: %d\n", ps->age);
printf("tele: %s\n", ps->tele);
printf("sex: %s\n", ps->sex);
return 0;
}
结构体传参
废话不多说,直接上代码。
#include<stdio.h>
typedef struct Stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}Stu;
void Print1(Stu tmp)
{
printf("name: %s\n", tmp.name);
printf("age: %d\n", tmp.age);
printf("tele: %s\n", tmp.tele);
printf("sex: %s\n", tmp.sex);
}
void Print2(Stu* ps)
{
printf("name: %s\n", ps->name);
printf("age: %d\n", ps->age);
printf("tele: %s\n", ps->tele);
printf("sex: %s\n", ps->sex);
}
int main()
{
Stu s = { "张三",20,"12345667899","男"};
//打印结构数据
Print1(s);
Print2(&s);
return 0;
}
两种传参方式要首选print2函数。
原因: 函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
结论:结构体传参的时候,要传结构体的地址。
|