1、常规的标准方式:

1 #include <stdio.h>
 2 
 3 struct student{
 4     int age;
 5     float score;
 6     char sex;
 7 };
 8 
 9 int main(int argc, char **argv)
10 {
11     struct student studenta = {
12         30,
13         79.5,
14         'm'
15     };
16 
17     printf("年龄: %d, 分数: %.2f  性别:%c\n", studenta.age, studenta.score, studenta.sex);
18 
19     return 0;
20 }

编译::!gcc % -o %<

运行::!%<

结果:年龄: 30, 分数: 79.50  性别:m


2、不够标准的方式(声明时初始化):

1 #include <stdio.h>
 2 
 3 struct student{
 4     int age;
 5     float score;
 6     char sex;
 7 } studenta = {
 8     30,
 9     79.5,
10     'm'
11 };
12 
13 int main(int argc, char **argv)
14 {
15     printf("年龄: %d, 分数: %.2f  性别:%c\n", studenta.age, studenta.score, studenta.sex);
16 
17     return 0;
18 }

编译::!gcc % -o %<

运行::!%<

结果:年龄: 30, 分数: 79.50  性别:m

3、最糟糕的方式(不完全声明时初始化):

1 #include <stdio.h>
 2 
 3 struct {
 4     int age;
 5     float score;
 6     char sex;
 7 } studenta = {
 8     30,
 9     79.5,
10     'm'
11 };
12 
13 int main(int argc, char **argv)
14 {
15     printf("年龄: %d, 分数: %.2f  性别:%c\n", studenta.age, studenta.score, studenta.sex);
16 
17     return 0;
18 }

编译::!gcc % -o %<

运行::!%<

结果:年龄: 30, 分数: 79.50  性别:m

4、我推崇的方式:

1 #include <stdio.h>
 2 
 3 typedef struct _student{
 4     int age;
 5     float score;
 6     char sex;
 7 } Student;
 8 
 9 int main(int argc, char **argv)
10 {
11     Student studenta = {
12         30,
13         79.5,
14         'm'
15     };
16 
17     printf("年龄: %d, 分数: %.2f  性别:%c\n", studenta.age, studenta.score, studenta.sex);
18 
19     return 0;
20 }

编译::!gcc % -o %<

运行::!%<

结果:年龄: 30, 分数: 79.50  性别:m

这几种方式中,第四种的优点:

1.使用了类型定义,typedef

2.遵照了结构体的命名约定,就是在student前加_,使用_student

3.使用首字母大写式的命名,使得使用者明白这是一种类型,而不是普通变量

4.为将来的使用创建了良好的基础,后期声明无需频繁使用struct表明是结构体,只需要使用Student即可,既便于使用和理解,又能有效的完成封装与信息隐藏。

因此,个人更推崇第四种方式。

读人民邮电出版社的《深入理解C指针》原著:Richard Reese 陈晓亮译,p126有感,于九江学院通信实训中心机房 2015年 3月30日

转载于:https://www.cnblogs.com/guochaoxxl/p/6823195.html

c中结构体的4种定义相关推荐

  1. c语言定义学生结构体类型,C语言中结构体的三种定义方式

    c语言中结构体的定义: struct 结构体名{ 成员列表: ..... }结构体变量: 7.1.1 结构体类型变量的定义 结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对 ...

  2. C语言结构体的四种定义方式

    1.先定义结构体类型,再定义结构体变量 struct student{int age;char* name; };struct student stu;//stu为student的结构体变量 2.定义 ...

  3. C语言中结构体指针出现重定义,C语言结构体指针中包含结构体指针

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. 将C++代码转化为C的过程中,一些C++的特性无法使用 类内私有变量在类内公共 ...

  4. 【C 语言】结构体 ( 结构体类型定义 | 结构体类型别名 | 声明结构体变量的三种方法 | 栈内存中声明结构体变量 | 定义隐式结构体时声明变量 | 定义普通结构体时声明变量 )

    文章目录 一.结构体类型定义 二.结构体类型别名 三.结构体类型变量声明 1.使用结构体类型 ( 别名 ) 声明变量 2. 定义隐式结构体时声明变量 3.定义普通结构体时声明变量 二.完整代码示例 一 ...

  5. C#中结构体定义并转换字节数组

    ref: https://www.cnblogs.com/dafanjoy/p/7818126.html C#中结构体定义并转换字节数组 最近的项目在做socket通信报文解析的时候,用到了结构体与字 ...

  6. c语言中结构体类型定义的函数指针,结构体中定义函数指针

    结构体指针变量的定义 定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct 结构体标识符{ 成员变量列表;-};struct 结构体标识符 *指针变量名;变量初始化:stru ...

  7. c语言中结构体变量的作用,C语言 结构体 类型变量的 定义 和 引用

    前面学习了变量和数组这些简单的数据结构,它们的特点是必须使用规定的数据类型.例如数组被定义为整型后,它的所有存储单元都是由整型构成.现实生活中某一类事物的共同属性可能是由不同的数据类型组成的集合,或者 ...

  8. C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?

    C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题? 问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的. 问题2:给结构体变量分配之后,是否还要 ...

  9. c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配

    #include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...

最新文章

  1. 不应该在ToString()方法中修改引用类型
  2. 7-n!末尾有几个0
  3. TurboIM专业集成即时通讯获新宠
  4. 代码审计_md5()函数
  5. extjs给panel添加滚动条_extjs.treePanel在ie9下滚动条的显示问题-阿里云开发者社区...
  6. linux+listen错误,linux listen()
  7. 如何在Ubuntu 18.04上安装/卸载NodeJS
  8. CAN学习笔记之15765-2协议摘要
  9. 哪些业务场景不适合部署在虚拟机上?
  10. 均衡发展计算机教室解说词,均衡发展图书室解说词|小学图书室解说词开场白范文推荐...
  11. cognex扫码枪识别内容直接_康耐视cognex DataMan8600系列-手持终端-条码扫描枪-PDA-扫描模块-条码打印机-苏州奥维尔...
  12. 八、管道弯头中流体混合流动与传热
  13. win10 C盘扩大容量
  14. 【搜索】桐桐的运输方案
  15. 天下武功,无坚不破,唯快不破
  16. 职业教育计算机教学,浅析职业教育中的计算机教学思考.doc
  17. 崖山数据库系统YashanDB荣获“2022年度信创卓越贡献奖”
  18. Netty总结(面试须知)
  19. linux listener.ora 位置,Oracel数据库 listener.ora和tnsnames.ora配置
  20. GPS接收机设计(5)——定位解算

热门文章

  1. 如何使用FaunaDB + GraphQL
  2. 桌面应用程序 azure_如何开始使用Microsoft Azure-功能应用程序,HTTP触发器和事件队列...
  3. java源码推荐_基于java的推荐系统实现源代码
  4. 学完javase和mysql_Java基础学完接下来应该学什么呢?
  5. 2021年Java面试题目最新总结【90%面试会踩的坑】
  6. POJ 2456 Aggressive cows(二分答案)
  7. 苏宁零售云 App 稳定保障实践
  8. 专访小邪:从十年技术之路看阿里技术体系的变革
  9. 【微服务】Spring-Boot整合Consul (自定义服务配置及健康检查)
  10. 11G RAC 进程启动顺序