浅谈结构体基础定义及实现方法

一,结构体目的声明

 1,首先类比单个数据定义,如果一个数据定义为int,则该数只能存int类型;如果定义为char,则该数只能存char类型;

       若此时有一个学生信息定义:有姓名,学号,性别,年龄等n个数据.

       按单个数据定义进行学生信息赋值的话,一个人需要定义n的新数据,两个人就需新定义2n个数据,若人数过多仅仅定义新数据的工程就太庞大了。

 2,所以此时用结构体来进行定义, 结构体的目的就是将不同类型的数据按照需求进行整体封装,结构体里面的数据类型与大小均可以自行添加,改变。

eg;上面学生信息定义:

       struct STUDENT
       {
            char name[20];             //姓名
            int num;                        //学号
            char sex;                      //性别
            int age;                         //年龄
       };  

      此时新定义的学生,只需要调用该结构体就可直接定义这4项信息,而不用每个学生新定义4项信息。

      而这里的STUDENT就相当于int也是一种类型,

       int a表示int类型的a;STUDENT b则表示STUDENT类型的b,此时b包含封装的四种信息。 

声明一个结构体类型的一般形式为:
struct  结构体类型名
{
    变量信息
};

二,结构体定义

如上面,新定义一个学生,则可用struct STUDENT s1;此时s1就拥有了STUDENT的四项信息。

        但是结构体类型的声明和函数声明类似,如果在所有函数之前进行声明,那么就可以在所有函数中直接用它来定义变量;

但如果是在某个函数中进行声明,那么只能在该函数中用它来定义变量。

        所以某一函数里面定义的不能在其它函数里面使用,其他函数想使用只能引用。

       或者定义全局变量:即定义的时候,在结构体最后“;”前添加。

局部定义形式:

struct 结构体类型名 物体;

全局定义形式:

struct  结构体类型名
{
    变量信息
}物体;

三,结构体变量的赋值引用

赋值:

若此时有一个新学生s1需赋值则有两种方法:

1,定义的时候直接全部赋值(每一项需要与结构体对应):

      struct STUDENT s1 = {"小明", ,20200000 ,"男", 18};                        //姓名,学号,性别,年龄

      (整体赋值仅限于定义时)

2,单独给每一项变量信息赋值(此时用”.“):

      struct STUDENT s1;

      strcpy(s1. name,"小明");             //姓名
      s1.num=20200000;                     //学号
      s1.sex="男";                                //性别
      s1.age=18;                                  //年龄

引用:

与单独赋值一样:

若需获得s1的姓名,则cout<<s1.name;

若需获得s1的学号,则cout<<s1.num;

.........

四,结构体数组

和数组类似,只不过数组每个点只能存一个数,而结构体数组每个点存的是封装的一个不同数据类型的结构。

如数组定义int a[5],则每个点都存一个int类型数据

而结构体struct STUDENT s1[5];则每一个点都是一个结构体即存有四个信息。

比如定义5个学生,则为s1[0]代表第一个人,s1[1]代表第二个。

此时若要知道第三个人的性别年龄,则。

cout<<s1[2].sex;cout<<s12].age;

结构体数组可以跟数组比较。

五,结构体数组实际长度

sizeof(s1) / sizeof(struct STUDENT);           //sizeof(s1)结构体数组大小;sizeof(struct STUDENT)每一个结点大小,即结构体大小

六,结构体做指针

       结构体变量名在表达式中不会像数组一样被自动转换为指针,所以要想取得结构体变量的地址,必须在前面加&,如下赋值:

     struct STUDENT  s1; 

     struct STUDENT *s2 = &s1; 

获取对应变成指针后的变量信息:

    (*s2).memberName

    s2->memberName

这篇博客原因就是因为课本上有一串代码,我还以为他呢正确,如下:

struct
{
    int number;
    char name;
}Node[10];

可以看出下面是按照C语言是错的,因为没有结构体类型名。没有类型名,就相当于int a;少了int,肯定错误

这串代码可能是伪代码之类的。

文章有什么不足或错误欢迎评论指正

 

 

     

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大学生毕设

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值