黑马程序员————结构体学习笔记

                                               -----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

                                                               结构体

1.1、结构体类型介绍

        在实际问题中,一组数据不会只有单一的数据类型。比如,公司员工信息,员工姓名为字符型,工号为整型或者是字符型,年龄为整型,工资为浮点型,等等。显然用数组来存放这些数据显然是不合理的。为了解决这个问题,C语言提供了一个构造数据类型——“结构structure”。这是一种构造数据类型,是由若干成员组成的。这些成员可以是基本的数据类型,也可以是构造数据类型(结构体、共用体、数组)。结构体、共用体、数组属于构造型数据,这些构造类型的数据也是由若干基本数据类型组合而成的。结构体、共用体鱼数组的区别在于结构体、共用体的组成元素是不同的数据类型的数据。

 1.2、结构体类型数据的定义

         在C语言中,定义结构体的关键字: struct

          结构体数据类型定义的一般形式如下:

          struct    结构体名称{

          数据类型1     变量名1;

          数据类型2    变量名2;

          数据类型3     变量名3;

           ......

          数据类型n    变量名n;

          } ; 

 注意: 大括号后面有一个分号;表示结束

例如:定义一个存储员工信息的结构体,包括员工工号、姓名、性别、工资信息。其对应的结构体定义如下:

<pre name="code" class="html">struct employee
{
    int num;             // 员工工号
    char name[20];      //员工姓名
    char sex;           //员工性别
    float wage;         //员工工资
};


         在这个结构体中,结构体名称为 employee, 结构体成员有四个。第一个成员 num,整形变量,用于存储员工的工号;第二个成员为   name,字符型数组,用于存储员工的姓名;第三个成员 sex,浮点型变量,用于存储员工的性别。第四个成员 wage ,浮点型变量,用于存储员工的工资。结构体定义之后就可以进行变量说明。结构体 employee的变量就必须有四个成员。 

         对于结构体类型的定义说明:

         1、结构体名是由用户自定义的标识符,所以要严格遵守标识符的命名原则来命名。

         2、结构体成员可以是任何一种数据类型,可以使基本数据类型,也可以是构造数据类型,还可以是用户已经定义过的结构体数据类型。这个可以在实际运用中灵活操作。

         3、结构体定义后在括号后面的分好是必不可少的,分号是结构体的一部分。

         4、当一个结构体的数据类型是另一个结构体时,称之为“结构体的嵌套”。作为成员的数据类型的结构体必须在本结构体之前。

<pre name="code" class="html">struct  birth    //定义生日结构体
{
    int year; // 出生年份
    int month; //出生月份
    int day;   //出生的日子
};
struct employee
{
<pre name="code" class="html">     int num;                // 员工工号
    char name[20];          //员工姓名
    char sex;               //员工性别
    float wage;             //员工工资
struct birth birthday ; //嵌套生日结构体 };

 

生日结构体必须在员工结构体之前。
 

1.3、结构体变量的定义与引用

         结构体类型本身就是一种数据类型,视具体的数据,也不占用系统内存空间。当程序中已经定义了结构体之后,就是用“struct 结构体名” 作为数据类型符号来定义处理这种结构体数据的变量、数组、指针等。


1.3.1、结构体变量的定义和初始化

         结构体变量定义的方式有三种:1、先定义结构体,在定义相应的结构体变量;2、定义结构体的同时定义结构体变量;3、直接定义结构体类型的变量。

1、先定义结构体,在定义相应的结构体变量;

struct    结构体名称{
          数据类型1     变量名1;
          数据类型2    变量名2;
          数据类型3     变量名3;
           ......
          数据类型n    变量名n;
          } ; 
          ........
   struct   结构体名称  结构体变量名 = 初值;

这个结构体定义了一个结构体变量,并赋予了初值。

2、定义结构体的同时定义结构体变量;

struct    结构体名称{
          数据类型1     变量名1;
          数据类型2    变量名2;
          数据类型3     变量名3;
           ......
          数据类型n    变量名n;
          } <span style="font-family: Arial, Helvetica, sans-serif;">结构体变量名 = 初值;</span>
      
    

3、直接定义结构体类型的变量。

        直接定义结构体变量是在定义结构体时定义变量,省略结构体名称。这种方式定义的格式如下所示:

struct employee
{
    int num;             // 员工工号
    char name[20];      //员工姓名
    char sex;           //员工性别
    float wage;         //员工工资
}   emp1 = {1000001,“yuminhong”,'m',1000000},emp2 = {<span style="font-family: SimSun;">1000002,“mayun”,'m',2000000</span><span style="font-family: SimSun;">}</span><pre name="code" class="html">,emp3 = {<span style="font-family: SimSun;">1000003,“liuqiangdong”,'m',3000000</span><span style="font-family: SimSun;">}</span><span style="font-family: SimSun;">;</span>

        使用这种方式的缺点在于不可以在定义这种结构体的变量了。如果要使用的话,就必须重新定义这种结构体。 

       结构体本身只是一种数据类型,由用户自定义产生,他不占用存储空间,定义结构体变量之后,系统为其分配存储空间,他在内存中是一个连续的存储单元,总子节数等于该结构体所有的成员所占用的字节数之和。


1.4、结构体变量的引用

        在程序中使用结构体变量时,不可以将结构体作为一个整体来使用。结构体中得成员可以当成一般的变量来使用,结构体变量的赋值、输入、输出、运算等等都是通过结构体中得成员来实现的。

          

结构体变量名.成员名
其中 , “.” 表示成员运算符,他的运算优先级是最高的,圆括号运算符()、下标运算符【】是同一级别的,运算顺序自左向右。

 

struct employee
{
    int num;             // 员工工号
    char name[20];      //员工姓名
    char sex;           //员工性别
    float wage;         //员工工资
}   emp1 = {1000001,“yuminhong”,'m',1000000},emp2 = {1000002,“mayun”,'m',2000000}
,emp3 = {1000003,“liuqiangdong”,'m',3000000};
printf("%d,%s\n",emp1,emp2,emp3);
这种输出格式是错误的!

正确的输出格式是:

<pre name="code" class="html">printf("%d,%s\n",emp1.num,emp1.name);


 

【实例1.4】结构体变量成员的引用

 

<pre name="code" class="html"><span style="font-size:18px;">#include <stdio.h></span>
<span style="font-size:18px;">struct employee{</span>
<span style="font-size:18px;">    int num;             // 员工工号
    char name[20];      //员工姓名
    char sex;           //员工性别
    float wage;         //员工工资</span>
<span style="font-size:18px;"></span>
<span style="font-family: SimSun;"><span style="font-size:18px;">}emp;</span></span>
int main(int argc,const char * argv[]){

 
<span style="font-size:18px;">     printf(“请输入员工工号\n”);</span>
<span style="font-size:18px;">     scanf("%d",&emp.num);</span>
<pre name="code" class="html"><span style="font-size:18px;">     printf(“请输入员工姓名\n”);</span>
<span style="font-size:18px;">     scanf("%s",&emp.name);</span>
<span style="font-size:18px;">     printf(“请输入员工性别\n”);</span>
<span style="font-size:18px;">     scanf("%s",&emp.sex);</span>
<pre name="code" class="html"><span style="font-size:18px;">     printf(“请输入员工工资\n”);</span>
<span style="font-size:18px;">     scanf("%d",&emp.wage);</span>

 
 
//输出员工信息
<span style="font-size:18px;">   printf(“---------------\n”);</span>
<span style="font-size:18px;">   </span><pre name="code" class="html"><span style="font-size:18px;">   printf(“%d,%s,%s,%d\n”,emp.num,emp.name,emp.sex,emp.wage);</span>
 
 
 
<span style="font-size:18px;">}</span>








       


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值