admin管理员组文章数量:1487745
详解C语言结构体
1.结构体的声明
1.1 结构体的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量
如果说数组是一组相同类型元素的集合,那么结构体就是一组不一定相同元素的集合
1.2 结构的声明
代码语言:javascript代码运行次数:0运行复制struct tag
{
member-list;
}variable-list;
当我们描述一个学生时:
代码语言:javascript代码运行次数:0运行复制struct stu
{
char name[10];//姓名
int age;//年龄
char sex[10];//性别
};
1.3 结构成员的类型
结构成员可以是标量、数组、指针,甚至是其它结构体
1.4结构体变量的定义和初始化
有了结构体类型,那么接下来就要定义变量了。
代码语言:javascript代码运行次数:0运行复制//代码1
#include <stdio.h>
struct stu
{
char name[10];//姓名
int age;//年龄
char sex[10];//性别
};
int main()
{
struct stu s = { "yui",17,"female" };
printf("姓名:%s 年龄:%d 性别:%s\n", s.name, s.age, s.sex);
return 0;
}
//打印结果:姓名:yui 年龄:17 性别:female
//代码2
struct Point
{
int x;
int y;
}p1;//声明类型的同时定义变量p1;
struct Point p2//定义结构体变量p2
//初始化:定义变量的同时赋初值
struct Point p3 = {x,y};
struct stu
{
char name[10];
int age;
};
struct stu s = {"yui",17};//初始化
struct node
{
int data;
struct Point p;
struct node* next;
}n1 = {10,{4,5},NULL};//结构体嵌套初始化
struct node n2 = {20,{5,6}.NULL}//结构体嵌套初始化
2.结构体成员的访问
- 结构体变量访问成员 结构体变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。 例如:
struct stu
{
char name[10];
int age;
};
struct stu s;
我们可以看到s
有成员name``````age
那我们如何访问s的成员?
struct stu s;
strcpy(stu.name,"yui");//使用.访问name成员
s.age = 20;//使用.访问age成员
- 结构体指针访问指向变量的成员 有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针
#include <stdio.h>
struct stu
{
char name[10];//姓名
int age;//年龄
char sex[10];//性别
};
void print(struct stu* ps)
{
//使用结构体指针访问指向对象的成员
printf("姓名:%s 年龄:%d 性别:%s\n", ps->name, ps->age, ps->sex);
}
int main()
{
struct stu s = { "yui",17,"female" };
print(&s);//结构体地址传址
return 0;
}
//打印结果:
//姓名:yui 年龄:17 性别:female
3.结构体传参
代码语言:javascript代码运行次数:0运行复制#include <stdio.h>
struct stu
{
char name[10];//姓名
int age;//年龄
char sex[10];//性别
};
//结构体传参
void print1(struct stu s)
{
printf("姓名:%s 年龄:%d 性别:%s\n", s.name, s.age,s.sex);
}
//结构体地址传参
void print2(struct stu* ps)
{
printf("姓名:%s 年龄:%d 性别:%s\n", ps->name, ps->age, ps->sex);
}
int main()
{
struct stu s = { "yui",17,"female" };
print1(s);//传结构体
print2(&s);//传地址
return 0;
}
//打印结果:
/*
姓名:yui 年龄:17 性别:female
姓名:yui 年龄:17 性别:female
*/
如果我们要对函数传递结构体时,传地址会更好。
函数传参的时候,参数是要压栈的。 如果传递的结构体太大了,参数压栈的系统开销比较大,所以会导致性能的下降。 如果你需要保留函数中对结构体的修改,也是需要传递地址的。
综上: 结构体传参的时候,尽量传结构体的地址。 完
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-10-15,如有侵权请联系 cloudcommunity@tencent 删除变量函数集合指针struct本文标签: 详解C语言结构体
版权声明:本文标题:详解C语言结构体 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/shuma/1754817660a3179979.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论