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. [USACO1.5] 回文质数

    P1217  Prime Palindromes 题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围[a,b](5 < ...

  2. proteus中蜂鸣器不响的原因

        本文参考自https://blog.csdn.net/gin_love/article/details/51168369 此网站.在用proteus仿真报警电路时,发现蜂鸣器不响.后在网上找了 ...

  3. [BZOJ1899]Lunch 午餐(DP)

    [BZOJ1899] 首先有个很贪心的思路,吃饭时间长的最先打饭为最优,所以开始先排个序 然后考虑DP,我们不需要知道某个人在哪个对,只要关注总的时间就行了 肯定需要一维表示当前同学编号,还需要表示某 ...

  4. 20145202马超《Java程序设计》第十周学习总结

    一.网络编程 1.网络概述 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴.在发送和接收数据 ...

  5. python中全局变量的修改

    对于全局变量的修改,如果全局变量是int或者str,那么如果想要在函数中对函数变量进行修改,则需要先在函数内,声明其为global,再进行修改 如果是list或者dict则可以直接修改 a = 1 b ...

  6. Avril Lavigne : Everybody Hurts (Ver3)

    http://www.guitartabsexplorer.com/ http://www.guitartabsexplorer.com/lavigne-avril-Tabs/everybody-hu ...

  7. LC.exe已退出,代码为-1

    解决方法就是把Properties文件下的license.licx给删除,重新编译,这样就可以了.

  8. 为什么rows这么大,在mysql explain中---写在去acumg听讲座的前一夜

    这周五下班前,发现了一个奇怪问题,大概是这个背景 一张表,结构为 Create Table: CREATE TABLE `out_table` ( `id` ) NOT NULL AUTO_INCRE ...

  9. OZ customize windows iamge

    1.之前通过修改auto文件和windows.py文件可实现自动安装OS,但是disk bus只能以IDE模式启动,进入系统自动下载运行bat文件,安装cloudbase-init和qga,及清理日志 ...

  10. 第一章 C++编程基础

    第一章 C++编程基础 1.1 如何撰写C++程序 赋值 assignment复合赋值 (compound assignment) += 函数(function)是一块独立的程序代码序列(code s ...