结构体和共用体的定义和使用

定义的方法:

方法一:

struct 结构体类型名称                                     

{

数据类型 成员名1;

数据类型 成员名2;

        ......

};  这里的分号一定不能少了。

方法二:

struct 结构体类型名称

{

数据类型 成员名1;

数据类型 成员名2;

.......

} 结构体变量名1,结构体变量名2 ;                     --------->这里的结构体变量名可以对结构体中的成员变量初始化,如

                                                            struct STU

                                                            {

                                                                                    

                                                                        数据类型 成员名1;

                                                                        数据类型 成员名2;

                                                                        ......

                                                             }stu={成员1的值,成员2的值,.....};分号不能少


                                                          也可以是一个数组     stu[3] = {{成员1的值,成员2的值,......},

                                                                                                           {成员1的值,成员2的值,.....}

                                                                                                          {成员1的值,成员2的值,.......}};这里分号不能少了

                                                           也可以是一个指针    *stu;   但是不能直接给初值,只能在在函数里赋值。

                 也可以直接给一个结构体变量名但是不赋初值,到使用时才赋初值。

                                                          也可以在函数里定义一个结构体变量       struct 结构体类型名 结构体变量名;(结构体变 量 名可以是以上的任何一种形式)


struct 结构体类型名
{
数据类型 成员名 1= 初始值1;
数据类型 成员名2 = 初始值2;
....
};                           ---------------->   这种定义的时候在结构体内部初始化成员变量的做法是不对的。


对结构体成员的访问方法:

              结构体变量名.成员名1;

             结构体变量名.成员名2;  如stu.成员名1;

 如果变量名是数组的话:

             结构数组名[下标].成员名1;   如  stu[0].成员名1;

如果变量名是指针的话:  这里值得注意的是 结构体指针变量指向的是结构体的首地址

             (*结构体指针变量).成员名;或者

              结构体指针变量 -> 成员名;  如 (*stu).成员名1;或 stu ->成员名1;



结构体定义的位置:

结构体可以定义在函数之外。当工程量小的时候可以直接定义在同一个文件,但是在函数的前面;当工程量大的时候可以另外建立一个新的 .h 文件来存放结构体,以后其它的 .c 文件需要的时候可以在头文件引用时引用结构体所在的头文件。

如 struct {  };                                          #include <XXX.h>    结构体所在的 .h 文件名

    int main()                                                main() 

    {                                                              {

       这里函数内就可以对结构体的成员进行访问了

    }                                                               }

结构体也可以定义在函数内,如 int main()

                                                    {   

                                                      struct {   };

                                                     return 0 ;

                                                     }



结构体和共用体的区别:

      共用体的定义:允许集中不同类型的变量存放到同一段内存单元中,也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,被称为共用体类型结构,简称公用体。

     定义的形式和结构体定义基本类似:

      union 公用体名

      {

         数据类型   成员名1;

         数据类型   成员名2;

           .......

       }变量名;

  

共用体具有的特点:

     1. 在同一个内存段可以存放有几种不同类型的成员,但是每一瞬间只能有一个成员起作用,其它成员不起作用,即不是同时都存在和起作用的。就是说每次要调用共用体的成员都只能使用其中一个,使用完之后才能使用另外一个。(结构体中可以同时使用不同的成员变量)

      2. 公用体变量默认起作用的成员是最后一次存放的成员,在存入新的成员后,原有成员就失去了作用。(结构体中每个成员都起作用)

      3.公用体变量的地址和它个成员的地址都是同一个地址。这和定义相关,因为是集中不同类型的变量存放到同一段内存单元中。公用体的长度等于最长的成员长度。(结构体每个成员都有自己的内存空间,可以同时起作用,一个struct的总长度等于所有成员长度之和)

      4.不能对公用体变量名赋值,也不能企图引用变量名来得到一个值 (这点和结构体类似),并且,不能再定义公用体变量时对它进行初始化 (结构体是可以在定义结构体变量是进行初始化的)。

      5.不能把公用体变量作为函数参数(结构体变量可以做函数的参数),也不能使函数返回公用体变量(结构体可以使用),但是可以使用指向公用体变量的指针(结构体可以使用指向结构体变量的指针)。

      6.公用体类型可以出现在结构体类型的定义中,也可以定义公用体数组。反之,结构体也可以出现在公用体类型的定义中,数组也可以作为公用体的成员。 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值