山农某Freshman的试水——结构

昨晚和今早学习讲述的内容是结构
经过老师和B站视频av3425303的教育,我大概对结构有了一点理解
按我理解总结起来就是结构是多个内容的统一体,自己还带了一个名字。
就像山东与中国的关系一样。
先来介绍一下结构体的结构:

struct  标识符//自行确定,相当于变量名
	{  类型   成员1 ;
	   类型   成员2 ;
	   …
	   类型   成员n ;
	} ; //最后的这个分号一定不能落下      

例如:

struct  employee  
{  char  name [ 10 ] ;
    long  code ;
    double  salary ;
    char address [ 50 ] ;
    char  phone [ 20 ] ;
} ;

下面是对结构体更为官方的解释

结构是由不同数据类型的数据组成的集合体。
结构由数目固定的成员构成
各成员可以具有不同的数据类型
一个结构变量在内存占有一片连续的存储空间

值得一提的是最后一条关于结构体的存储
就如数组一样,定义一个数组a[10],只要a[0]确定了地址,这个数组后面的a[1]到a[9]会紧跟着a[0]。也就是说标识符的地址确定了后,其后面的每一个成员的地址都会紧随其后。

在定义一个结构变量的时候,可以声明类型之后声明变量:

struct  employee  
{  char  name [ 10 ] ;
    long  code ;
    double  salary ;
    char address [ 50 ] ;
    char  phone [ 20 ] ;
};
employee  worker1, worker2, *Emp ;

也可以声明类型的同时声明变量

struct  employee  
{   char  name [ 10 ] ;
    long  code ;
    double  salary ;
    char address [ 50 ] ;
    char  phone [ 20 ] ;
}worker1, worker2, *Emp ;

这样下来worker1,worker2就都是两个employee类型的变量了,*Emp是employee类型的指针变量。另外,在说明结构变量的同时可以进行初始化,例如:

employee worker=
{"Wang Datou",918564,100000,"Guang Zhou","857857857857"};

在访问和赋值的时候,结构体也只能单独访问和赋值,访问结构变量成员使用的是圆点运算符:结构变量名.成员
例如:

#include<iostream>
using namespace std;
struct  weather		// 声明结构类型,写在主函数之前
{  double  temp;    double  wind;  } ;
int main ( )
{  weather  today ;	// 声明结构类型变量
    today . temp = 10.5 ;	// 对结构变量成员赋值
    today . wind = 3.1 ;
    cout << “Temp =<< today . temp << endl ;	 // 按成员输出
    cout << “Wind =<< today . wind << endl ;
}

也可以用指针访问结构变量的成员 :
结构指针 -> 成员
(*结构指针 ) . 成员

# include <iostream>
# include <cstring>
using namespace std ;
struct  person
{ char name[20] ;   unsigned long id;   double salary; } ;
  int main ( )
{  person   pr1 ;
   person *  pp ;		// 定义结构指针
   pp = & pr1 ;		// 取结构变量地址
   strcpy ( (pp*).name ,  “David Marat” ) ;		// 对结构成员赋值
   (pp*).id=987654321 ;
   pp->salary=335.0 ;
   cout << pp -> name << ‘\t’ << pp -> id << ‘\t’ << pp -> salary << endl ;
}

结构体数组应用举例:
对候选人得票的统计程序。
设有3个候选人,最终只能有1人当选。今有10个人参加投票,从键盘先后输入这10个人所投的候选人的名字,要求最后输出这3个候选人的得票结果。

#include <iostream>
struct Person//声明结构体类型Person
{
   char name[20];
   int count;
};
int main( )
{
   Person leader[3]={″Li″,0,″Zhang″,0,″Fun″,0};
//定义Person类型的数组,内容为3个候选人的姓名和当前的得票数
   int i,j;
   char leader_name[20];//leader_name为投票人所选的人的姓名
   for(i=0;i<10;i++)
   {
      cin>>leader_name; //输入10张票上所写的姓名
      for(j=0;j<3;j++) //将票上姓名与3个候选人的姓名比较
         if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;
         //如果与某一候选人的姓名相同,就给他加一票
   }
   cout<<endl;
   for(i=0;i<3;i++) //输出3个候选人的姓名与最后得票数
   {
      cout<<leader[i].name<<:<<leader[i].count<<endl;
   }
   return 0;
}

在使用结构体的时候有一点值得注意:
一个结构类型的成员可以是另一个已定义的结构类型
例如:
为职工结构添加出生日期信息类型和变量声明为:

struct  **date**
{  int  month ;
   int  day ;
   int  year ;
} ;
struct employee
{  char  name [ 10 ] ;
    **date  birthday ;**
    long  code ;
    double  salary ;
    char address [ 50 ] ;
    char  phone [ 11 ] ;
}  worker1, worker2 ;

但是结构函数不能自己实现无穷的递归结构,也就是说在结构体内部包含一个类型为该结构的成员这是非法的

struct  person
{   char  name [ 10 ] ;
    long  code ;
    double  salary ;
    char address [ 50 ] ;
    char  phone [ 11 ] ; 
    person son;//×
   }  worker1, worker2 ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值