您现在的位置是:时尚 >>正文

struct结构体用法

时尚74288人已围观

简介 struct结构体用法 C语言里,struct大概是最好用的数据组织工具,没有之一。我见过太多人,写程序恨不得把所有变量都堆在main函数里,整出几百行的“面条代码”。其实一个struct就能把散沙 ...

struct结构体用法

C语言里,结构struct大概是体用最好用的数据组织工具,没有之一。结构我见过太多人,体用写程序恨不得把所有变量都堆在main函数里,结构整出几百行的体用“面条代码”。其实一个struct就能把散沙似的结构变量捆成有用的整体。 拿我最近改的体用一个学生管理系统来说。原来的结构代码长这样:`char name[20]; int age; float score;` 三个数组分别存三个班的学生,每次操作都得同步维护三个下标,体用改一个地方忘改另一处,结构bug就冒出来了。体用换成struct之后,结构定义`struct student { char name[20]; int age; float score; };`,体用然后`struct student stu[60];`,结构一个数组搞定所有信息。访问学生张三的分数,直接`stu[i].score`,清晰得不能再清晰。 struct真正厉害的地方在于嵌套。比如你要描述一个地址,省、市、街道、邮编,单独写四个变量,回头传参得传四次。把它们塞进`struct address`,再嵌进`struct person`,整个人的信息就成一个整体了。传函数的时候,传一个指针就行,不用举着四个参数晃来晃去。 还有一个容易踩的坑——struct的拷贝。很多人以为struct变量之间不能直接赋值,其实完全可以。`struct point a = { 3, 5}; struct point b = a;` 这样b就拿到了a的全部字段值。但注意,如果struct里有指针字段,这种浅拷贝会出大问题。两个struct的指针指向同一块内存,一个改了值,另一个跟着变,排查起来能让人抓狂。 内存对齐这事儿,也得提一嘴。struct的大小不是简单地把字段大小加起来。因为CPU读取内存有对齐要求,编译器会在字段之间插入填充字节。比如`struct { char c; int i; };`,char占1字节,但int要4字节对齐,所以实际占8字节而不是5字节。写通信协议或者文件格式的时候,这个必须算清楚,否则解析出来的数据全是乱的。 实际工程里,struct常和typedef搭配使用。`typedef struct node Node;` 省得每次写`struct node`那么啰嗦。C语言有些写法确实繁琐,能简则简,把精力留给真正的逻辑。 说个具体的操作技巧。初始化struct时,用指定初始化器比按顺序赋值安全得多。`struct student s = { .age = 18, .name = "Tom"};` 这样即使以后字段顺序变了,代码也不受影响。老代码里那种`{ “Tom”, 18, 88.5}`的写法,字段一多就容易对错位置。 struct还能和union配合,做类型转换的“瑞士军刀”。比如把float的二进制表示拆成字节数组,用union就比memcpy直观得多。不过union的水比较深,新手慎用,容易踩未定义行为的坑。 说到底,struct是一种思维方式的转变——从“一堆零散变量”到“一个完整对象”。用好了,代码的可读性和维护性会提升一个档次。不用它,你也能写程序,只是会在某个深夜,面对着一堆纠缠不清的变量名,后悔当初怎么没早点用struct。

Tags:

上一篇:秒拍

下一篇:战无不胜歌词谐音汉语

相关文章

  • emule怎样设置ip及从url更新

    时尚

    eMule的IP设置和URL更新,这事儿没你想的那么玄乎。很多人卡在“高ID”和“低ID”的坎上,其实根源就是端口没打通,或者服务器列表太陈旧。直接说结论:你要改的是两个地方——连接端口和服务器列表来 ...

    【时尚】

    阅读更多
  • 从系统整体看 安全漏洞包括哪些方面

    时尚

    安全漏洞从来不是孤立的代码缺陷,而是系统在运行逻辑、资源管理、信任边界和人为交互四个维度上同时失守的结果。我见过太多团队盯着CVE编号打补丁,却忽略了一个事实:漏洞是系统整体设计缺陷的投影。 先说运行 ...

    【时尚】

    阅读更多
  • 手写签名怎么转成透明电子签名

    时尚

    手写签名转透明电子签名,最笨也最靠谱的办法是:白纸黑字写下来,手机拍清楚,再用手机自带的编辑功能抠图。别急着装专业软件,你先试试这个流程,三分钟就能搞定。 拿张A4纸,笔迹重一点,别用太细的中性笔,签 ...

    【时尚】

    阅读更多


友情链接