【C语言】结构体成员类型
精选
原创
©著作权归作者所有:来自51CTO博客作者謓泽51Ctop的原创作品,请联系作者获取转载授权,否则将追究法律责任
🚩write in front🚩
🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家博主 & 阿里云星级博主~掘金⇿InfoQ~51CTOP创作者(创作新人榜No.38)~[CSDN]周榜102﹣总榜826 ⇿ 全网访问量35w+🏅
🆔本文由 謓泽 原创 发布在51CTOP 如需转载还请通知⚠
📝个人主页-謓泽51Ctop的博客📃
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏-謓泽51Ctop的分类_51CTO博客🎓
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
结构体成员的类型
结构体成员的类型,可以是变量,数组,指针,甚至是其它的结构体,这里就不每个去列举了。
结构体成员
结构体(套娃‘doge’)
在结构体成员类型中我说了下,但有些小伙伴可能会有点不清楚,在这里我把代码给大家,注意: 在上面结构体我使用了红色字体所标注的.
#include<stdio.h>
//学生家地址
struct address
{
char T [20];
};
//描述一个学生
typedef struct student //typedef —— 可以使用它来为类型取一个新的名字
{
char name[20]; //学生名字
char sex[5]; //学生性别
char id[20]; //学生学号
short int age; //学生年龄
struct address S;
}student; //注意:对结构体类型进行重命名
int main(void)
{
// struct student mation;// mation —— 结构体类型的变量
student mation = { "法外狂徒张三", "man", "10086", 18, {"康达小区三懂一单元"} };
printf("%s\n", mation.name);
printf("%s\n", mation.sex);
printf("%s\n", mation.id);
printf("%d\n", mation.age);
printf("%s\n", mation.S.T);//注意,由于我们是把一个结构体类型放在另一个结构体,所以这里需要找两次。
return 0;
}
结构体传参和传值
1.传参
注意,在print函数当中记得定义结构体关键字。
#include<stdio.h>
//描述一个学生
typedef struct student //typedef —— 可以使用它来为类型取一个新的名字
{
char name[20]; //学生名字
char sex[5]; //学生性别
char id[20]; //学生学号
short int age; //学生年龄
}student; //注意:对结构体类型进行重命名
void print(student tmp)
{
printf("%s\n", tmp.name);
printf("%s\n", tmp.sex);
printf("%s\n", tmp.id);
printf("%d\n", tmp.age);
}
int main(void)
{
// struct student mation;// mation —— 结构体类型的变量
student mation = { "法外狂徒张三", "man", "10086", 18 };
//实现传参
print(mation);
return 0;
}
2.传址
注意:print2函数中打印的,-> (操作符)。在这里tmp2指针箭头指向对象的内容。
#include<stdio.h>
//描述一个学生
typedef struct student //typedef —— 可以使用它来为类型取一个新的名字
{
char name[20]; //学生名字
char sex[5]; //学生性别
char id[20]; //学生学号
short int age; //学生年龄
}student; //注意:对结构体类型进行重命名
void print2(student *tmp){
printf("%s\n", tmp->name);
printf("%s\n", tmp->sex);
printf("%s\n", tmp->id);
printf("%d\n", tmp->age);
}
int main(void){
// struct student mation;// mation —— 结构体类型的变量
student mation = { "法外狂徒张三", "man", "10086", 18 };//结构体成员变量进行初始化
//实现传址
print2(&mation);
return 0;
}
注→结构体指针实际上指向的就是结构体类型当中成员变量的地址。就一句话。
各位,这两个函数如果要选择一个的话,选择第2个。因为:
- 传参:如果当我们用实参传递给形参的话,其实就是一份临时拷贝。这样的话就要把所有的数据内存空间给再copy一份下去。放在其它的内存上,在这里我取名为tmp。就很简单就是例如,是200个字节那么你传的参数就也要两百个字节,这就会导致空间的一个浪费就会非常严重滴,同时你copy过去还需要一定的时间。
- 传址:这里我传过去的仅仅是地址(&),一个地址就是4字节(32位)8个字节(64位),注意这里是int类型的数据类型所以是4个字节以及32个比特位,用三十二位的二进制来进行表达。
如果要选择一种,我们尽可能的去选择传址,因为效率更高些,而且还可以省出一定内存空间,尤其是对大型项目的看法,两种我们就可以去选择传址。
结论:当结构体传参的时候要传入结构体的地址。
好,那么本篇博客就带大家如何去学习结构体初始了,那么觉得本篇博客对你起到帮助的话,记得给博主一个点赞,当然能三连我会更开心的。其实写博客也算是对以前的知识点的一个总结吧,加油。