| 目录 结构体 结构体的声明 结构成员的类型 结构体变量的定义和初始化 结构体成员的访问 结构体传参 
 结构体结构体的声明比如描述一个学生 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函数。 原因: 函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。 结论:结构体传参的时候,要传结构体的地址。 |