返回

结构体

发布时间: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;
}

结论:结构体传参的时候,要传结构体的地址

函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。


特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线