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日

c中结构体的4种定义的更多相关文章

  1. C语言_结构体的4种定义初始化方式及案例

    结构体是一种构造数据类型 (构造数据类型:数组类型.结构体类型(struct).共用体类型(union)).用途:把不同类型的数据组合成一个整体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一 ...

  2. c 语言结构体的三种定义方式

    struct 结构体名{   成员列表:   ..... }结构体变量: 结构体类型变量的定义 结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问题事先自行定义,所以结构体 ...

  3. 【转载】C++中结构体的声明和定义

    http://blog.csdn.net/whuslei/article/details/5665289 1  //定义一个结构体,类型为struct Student 2  struct  Stude ...

  4. C /C ++中结构体的定义

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

  5. C语言中结构体赋值问题的讨论

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  6. C语言中结构体对齐问题

    C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...

  7. C语言中结构体赋值问题的讨论(转载)

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  8. Go语言中结构体的使用-第2部分OOP

    1 概述 结构体的基本语法请参见:Go语言中结构体的使用-第1部分结构体.结构体除了是一个复合数据之外,还用来做面向对象编程.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. ...

  9. C++中 结构体和类的异同

    在C++中,结构体是一种特殊形态的类. 结构体和类的唯一区别就是:  结构体和类具有不同的默认访问控制属性. 类中,对于未指定访问控制属性的成员,其访问控制属性为私有类型(private) 结构体中, ...

随机推荐

  1. 笔记-cookie参数

    笔记-cookie参数 cookie各个参数详解 定义和用法 setcookie()函数向客户端发送一个 HTTP cookie. cookie是由服务器发送到浏览器的变量.cookie 通常是服务器 ...

  2. K-均值聚类——电影类型

    K-均值聚类 K-均值算法试图将一系列样本分割成K个不同的类簇(其中K是模型的输入参数),其形式化的目标函数称为类簇内的方差和(within cluster sum of squared errors ...

  3. NC-瑞士军刀NetCat

    NC——Telnet/Banner 连接之后可以命令互动,比如POP3\SMTP\HTTP等协议命令 root@kali:/# nc -v pop3..com //-v详细显示 DNS fwd/rev ...

  4. CocosCreator设置模拟器默认横竖屏以及机型

    之前好好的横屏,今天不知道为毛突然变成竖屏了,虽然可以在点击模拟器左上角进行设置,   但是 每次启动模拟器又变成竖屏了,折腾了很久,终于找到了设置的地方,记录下:        

  5. python的inspect模块

    一.type and members 1. inspect.getmembers(object[, predicate]) 第二个参数通常可以根据需要调用如下16个方法: 返回值为object的所有成 ...

  6. python代码简写(推导式 if else for in)

    c = a if a>b else b    //如果a>b返回a,否则返回b >>> a = 1 >>> b = 2 >>> c = ...

  7. Python全栈 MySQL 数据库 (简述 、安装、基本命令)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图     一个月的python已经结束了  下面就是数据库了   先说M ...

  8. Vim常用指令总结(持续更新中)

    1 模式变更 命令 说明 a(append)/i(insert) 普通模式→插入模式 : 普通模式→命令行模式 ESC或者Ctrl 插入模式→普通模式 R(Replace)/Insert两次 普通模式 ...

  9. (原)DirectX11 深度测试(有点另类)

    (问到自己清楚就可) @Author: 白袍小道 @说明:转载随缘,评论随缘,询问建议看书和源码会得到更准确的答案 深度测试的来源.目的.做法 一.问题询问 我们带着一些问题去浏览一番 1.深度测试发 ...

  10. 课时6:Python之常用操作符

    目录: 一.算术操作符 二.优先级问题 三.比较操作符 四.逻辑操作符 五.课时06课后习题及答案 ****************** 一.算术操作符 ****************** > ...