c语言结构体(初阶)
2023-12-27 04:45:44
1. 结构体的声明
1.1 结构体的基础知识
结构是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同类型的变量。
1.2 结构的声明
struct tag
{
member - list;
}variable-list;
例:描述一个人的信息:名字+电话+性别+身高
//声明的结构体类型struct peo
struct peo
{
char name[20];//名字
char tela[12];//电话
char sex[5];//性别
int high;//学号
}p1, p2;//分号不能丢
其中p1和p2是使用struct peo结构类型创建的两个变量,可以也就是p1和p2分别可以放一个人的信息。?但是因为p1和p2放在大括号的外面,所以p1和p2是两个全局的结构体变量。要想使其成为局部变量,我们可以使用下面这种方法创建结构体变量。
struct peo
{
char name[20];//名字
char tela[12];//电话
char sex[5];//性别
int high;//学号
};//分号不能丢?
int main()
{
struct peo p1 = { 0 };//结构体变量的创建
return 0;
}
1.3 结构体成员的类型
结构的成员可以是标量、数组、指针,甚至是其他的结构体。
struct peo
{
char name[20];//数组
};
struct st
{
struct peo p;//其他结构体
int num;//标量
float* f = num;//指针
};
1.4 结构体变量的定义和初始化
根据上面那个例题,我们可以如下初始化:
struct peo
{
char name[20];//名字
char tela[12];//电话
char sex[5];//性别
int high;//学号
};//分号不能丢?
int main()
{
struct peo p1 = { "暴龙战士","88888888888","男",250};//结构体变量的创建
return 0;
}
结构体成员包含结构体的结构体变量初始化:
我们需要再用一个{ }将结构体中包含的结构体初始化。
操作如下:?
struct peo
{
char name[20];//名字
char tela[12];//年龄
char sex[5];//性别
int high;//学号
};//分号不能丢?
struct st
{
struct peo p;
int num;
};
int main()
{
struct st s = { {"暴龙战士","88888888888","男",250},66 };
return 0;
}
初始化后我们可以按照以下的方法将其打印出来:
struct peo
{
char name[20];//名字
char tela[12];//年龄
char sex[5];//性别
int high;//学号
};//分号不能丢?
struct st
{
struct peo p;
int num;
};
int main()
{
struct peo p1 = { "暴龙战士","88888888888","男",250};//结构体变量的创建
struct st s = { {"暴龙战士","88888888888","男",250},66 };
printf("%s %s %s %d \n",p1.name,p1.tela,p1.sex,p1.high );
printf("%s %s %s %d %d\n", s.p.name, s.p.tela, s.p.sex, s.p.high, s.num);
return 0;
}
也就是:结构体变量+.+成员变量。?
?
2.结构体成员的访问
如果是结构体指针访问指向对象的成员:就用? 结构体指针 -> 成员变量? 的形式打印
如果是结构体变量访问成员:就用? 结构体变量?. 成员变量? 的形式打印
具体操作如下:
struct st
{
struct peo p;
int num;
};
void print1(struct peo* sp)
{
printf("%s %s %s %d \n", sp->name, sp->tela, sp->sex, sp->high);
//结构体指针 -> 成员变量
}
void print2(struct peo p)
{
printf("%s %s %s %d \n", p.name, p.tela, p.sex, p.high);
//结构体变量?. 成员变量
}
int main()
{
struct peo p1 = { "暴龙战士","88888888888","男",250};//结构体变量的创建
struct st s = { {"暴龙战士","88888888888","男",250},66 };
print1(&p1);
print2(p1);
return 0;
}
3.结构体传参
我们知道形参是实参的临时拷贝,如果使用结构体变量访问成员时形参就会将实参拷贝一份,这样就需要多开辟一块空间,就会结构体过大,参数压栈的系统开销比较大,从而导致性能的下降。
而使用结构体指针访问指向变量的成员时(如上述代码),我们只是将&p1(4个或8个字节)的地址传给sp而已。
结论:结构体传参的时候,要传结构体的地址。
文章来源:https://blog.csdn.net/weixin_58252863/article/details/135227533
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!