数据类型 | 结构体
定义
结构是一种复合的数据类型,可以包含多个不同类型的成员变量。
我们可以通过结构类型声明结构,并通过结构变量来访问结构的成员。结构变量可以赋初值,可以进行运算,还可以作为函数参数传递。
How to 声明
看下面的例子——声明一个有关学生的结构体
它就可以声明在变量的内部,也可以在变量的外部。
struct student { int id; char *name; };
How to 定义
使用上还算简单,就像是平常用变量一样
#include <stdio.h> struct student { char *id; char *name; }; int main() { struct student Mryan2005; Mryan2005.id = "007"; Mryan2005.name = "Mryan2005"; printf("%s's id is %s", Mryan2005.name, Mryan2005.id); }
程序里面就会输出这样的东西
Mryan2005's id is 007
其实,还有第二种办法。
#include <stdio.h> struct { char *id; char *name; } Mryan2005; int main() { Mryan2005.id = "007"; Mryan2005.name = "Mryan2005"; printf("%s's id is %s", Mryan2005.name, Mryan2005.id); }
当然,程序里面就会输出这样的东西
Mryan2005's id is 007
但这样的做法也只是因为这个结构体是暂时的。
最后一种写法是这样的
#include <stdio.h> struct student { char *id; char *name; } Mryan2005; int main() { Mryan2005.id = "007"; Mryan2005.name = "Mryan2005"; printf("%s's id is %s", Mryan2005.name, Mryan2005.id); }
当然,程序里面就会输出这样的东西
Mryan2005's id is 007
结构在内存中的体现
还是这个结构体
struct student { int id; char *name; };
我们可以先看一下sizeof(struct student)
的结果是多少
#include <stdio.h> struct student { char *id; char *name; }; int main() { printf("size of student is %d", sizeof(struct student)); }
它的size是16
。
至于为什么等于16,那是因为我在64位的操作系统中运行,所以,一个指针变量为8个字节;如果在32位系统下,则指针占用4字节。
初始化
第一种办法
#include <stdio.h> struct student { int order char *id; char *name; } Mryan2005; int main() { struct student Mryan2005 = {01, "007", "Mryan2005"}; }
这就出现了这样的情况
第二种办法
#include <stdio.h> struct student { int order; char *id; char *name; } Mryan2005; int main() { struct student Mryan2005 = {.id = "007", .name = "Mryan2005"}; }
id
和name
被赋予了具体的值,而order
没有,那结果就是order
为0
。
这就会是这样子了
结构运算
整体运算
#include <stdio.h> struct student { int order; char *id; char *name; } Mryan2005; int main() { Mryan2005 = (struct student){ 1, "007", "Mryan2005"}; }
变量与变量间直接赋值
就是这样
#include <stdio.h> struct student { int order; char *id; char *name; }; int main() { struct student Mryan2005 = (struct student){ 1, "007", "Mryan2005"}; struct student Mryan2003 = Mryan2005; }
先说一下,(struct student){ 1, "007", "Mryan2005"}
是什么意思?
这个意思就是,将{ 1, "007", "Mryan2005"}
强制转换成struct student
类型
我们看一下,结果会是怎么样
这就是数组做不了的,结构可以做。
那改动一个值,又会是怎么样的结果
#include <stdio.h> struct student { int order; char *id; char *name; }; int main() { struct student Mryan2005 = (struct student){ 1, "007", "Mryan2005"}; struct student Mryan0415 = Mryan2005; Mryan0415.name = "Mryan2005"; }
结果竟然是这样
结构成员
我们可以用.访问其成员,例如:Mryan2005.id
我们就可以访问到Mryan2005
中的id
。
结构指针
结构的名字不是变量的地址,必须要用&
struct date *Mystudent = &Mryan2005;
本文来自博客园,作者:Mryan2005,转载请注明原文链接:https://www.cnblogs.com/Mryan2005/p/17873377.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架