结构体
发布时间:2023-02-13 22:45:16 277 相关标签: # 数据
结构体的声明
结构是一些值的集合,这些值被称为成员变量。结构的每个成员都可以是不同类型的变量
结构的声明:复杂对象-结构体-我们自己创建的一种类型
struct xxx
{
//成员列表
}//变量列表;
如:描述一个学生的数据 。名字、年龄、电话、性别
struct Stu//struct结构体关键字 Stu结构体标签 struct Stu结构体类型
{
//成员变量
char name[20];
short age;
char tele[12];
char sex[5];
};
int main()
{
struct Stu s;//局部变量,创建结构体变量才能使用
return 0;
}
写法二:
struct Stu
{
//成员变量
char name[20];
short age;
char tele[12];
char sex[5];
}//s1,s2,s3;//直接创建了全局变量
写法三:
typedef struct Stu//typedef将名字改为了Stu
{
//成员变量
char name[20];
short age;
char tele[12];
char sex[5];
}Stu;
int mai()
{
Stu s;
return 0;
}
结构成员的类型可以是标量、数组、指针,甚至是其他结构体
结构体变量的定义和初始化
创建:
struct Point
{
int x;
int y;
}p1;//声明类型的同时定义变量p1
struct Point p2;//定义结构体变量p2
且初始化:
struct Stu S={"张三",20,"12345678911","男"};
嵌套另外的结构体也合理:
#include
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[]="hi!\n";
struct T t={"hehe",{100,w,"hello!",3.14},arr};
printf("%s\n",t.ch);
printf("%s\n",t.s.arr);//除了打印字符串,其他类型的都要解引用
return 0;
}
结构体传参
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:%s\n",tmp.age);
printf("tele:%s\n",tmp.tele);
printf("sex:%s\n",tmp.sex);
}
Print2(Stu* ps)
{
printf("name:%s\n",ps->name);
printf("age:%s\n",ps->age);
printf("tele:%s\n",ps->tele);
printf("sex:%s\n",ps->sex);
}
int main()
{
Stu s={"李四",40,123456789,"男"};
Print1(s);
//打印结构体数据,传参
Print2(&s);
return 0;
}
结论:结构体传参的时候,要传结构体的地址
函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
文章来源: https://blog.51cto.com/u_15899086/6039991
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报