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. 散列--数据结构与算法JavaScript描述(8)

    散列 散列是一种常用的数据存储技术,散列后的数据可以快速地插入或取用. 散列使用的数据结构叫做散列表. 在散列表上插入.删除和取用数据都非常快,但是对于查找操作来说却效率低下,比如查找一组数据中的最大 ...

  2. CentOS下使用Mysql

    安装过程百度,然后cd /etc->vi my.cnf修改配置文件,在mysqld下添加lower_case_table_name=1和character_set_server=utf8,保存退 ...

  3. Android MultiType第三方库的基本使用和案例+DiffUtil的简单用法

    1.MultiType简单介绍 1.1.MultiType用于比较复杂的页面. 如下图,今日头条用到了MultiType处理各种复杂的页面.    这种还是比较简单的类型.因为一个页面也就这种类型. ...

  4. 9 Django 模型层(2) --多表操作

    创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系( ...

  5. form表单提交和重置小结

    1. input标签 1.1>input[type=submit] <form name="form" method="post" action=& ...

  6. IOS客户端的个人中心可以查看自己的博客了。

    IOS客户端的个人中心可以查看自己的博客了. 写这篇是为了在客户端显示之用. 下一步实现在客户端发博客.

  7. (原) Unreal搬山-引言(图多慎)

    @author:白袍小道 扯淡:(图多) 何为搬山,这里借了剑来少年郎一句.(若有同道中人,甚是开心,开心的很) 江湖岂能没前辈) (江湖很大,足够你浪) (刺客信条 \荒野 \神秘海域 \死亡空间 ...

  8. 2 25urllib.py

    """ urllib.request.urlopen(url,data,timeout) """ # from urllib.request ...

  9. iptables的配置文件/etc/sysconfig/iptables不存在 linux防火墙开关命令

    某linux服务器,使用 cat /etc/sysconfig/iptables命令时, 找不到文件. 1. service iptables status 使用该命令检查状态 如果之前找不到配置文件 ...

  10. Nginx日志管理配置

    1.创建日志目录 nginx 的默认日志目录所在硬盘空间可能比较小,所以根据硬盘的空间状况创建日志目录 例如:mkdir /backup/nginx_logs 2.修改nginx配置文件 配置 ngi ...