结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量
//描述一个人
//名字,年龄,性别,电话
//创建一个结构体,用于描述这个人
#include<stdio.h>
struct Man
{
char name[20];//名字
short age;//年龄
char sex[5];//性别
long ph;//电话
}m1,m2,m3;//m1,m2,m3是三个全局的结构体变量(尽量不用这种全局变量)
int main()
{
struct Man M1={"wy",19,"M",135};//M1为局部变量
printf("%s\n",M1.name);
printf("%d\n",M1.age);
printf("%s\n",M1.sex);
printf("%d\n",M1.ph);
return 0;
}
//另一种写法
#include<stdio.h>
typedef struct Man
{
char name[20];
short age;
char sex[5];
long ph;
}Man;//这种写法操作更加简便,直接用Man就可当作类型使用
//这里的Man是类型不是变量
int main()
{
Man M1={"wy",19,"M",135};
printf("%s\n",M1.name);
printf("%d\n",M1.age);
printf("%s\n",M1.sex);
printf("%d\n",M1.ph);
return 0;
}
//嵌套结构体
#include<stdio.h>
typedef struct S
{
int a;
char c[10];
char arr[20];
double d;
}S;
typedef struct T
{
char ch[10];
S s;
char* p;
}T;
int main()
{
char arr[] = "handsome boy";
T t = { "hollow",{520,"w","yz",13.14 }, arr};
printf("%s\n", t.ch);// hollow
printf("%d\n", t.s.a);// 520
printf("%s\n", t.s.arr);// yz
printf("%lf\n", t.s.d);// 13.14000
printf("%s\n", t.p);// handsome boy
return 0;
}
结构体变量访问成员结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
//法1:Print1. 结构体传参
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct S
{
char name[20];
short age;
char tele[12];
char sex[5];
}S;
void Print1(S t)
{
printf("name: %s\n",t.name);
printf("age: %d\n",t.age);
printf("tele: %s\n",t.tele);
printf("sex: %s\n",t.sex);
}
int main()
{
S s={"李三",25,"15568889888","男"};
Print1(s);
return 0;
}
/*name: 李三
age: 25
tele: 15568889888
sex: 男*/
//法2:Printf2 结构体地址传参
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct S
{
char name[20];
short age;
char tele[12];
char sex[5];
}S;
void Print2(S *t)
{
printf("name: %s\n",t->name);
printf("age: %d\n",t->age);
printf("tele: %s\n",t->tele);
printf("sex: %s\n",t->sex);
}
int main()
{
S s={"李三",25,"15568889888","男"};
Print2(&s);
return 0;
}
/*name: 李三
age: 25
tele: 15568889888
sex: 男*/
相较于Print1,Print2更好,
原因:函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。(现阶段可理解为不需要开辟更多空间)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。