C++结构体初识(1)

本文深入探讨了C++中结构体的定义与使用,包括结构体的三种定义方法,成员的初始化,以及如何通过点运算符和指针访问结构体成员。此外,还介绍了结构体变量的整体赋值和包含结构体成员的复杂结构。

C++结构体

定义结构和访问结构

1:结构是由不同数据类型的数据组成的集合体。
2:结构由数目固定的成员构成。
3:各成员可以具有不同的数据类型。
4:一个结构变量在内存占有一片连续的存储空间。
在这里插入图片描述

定义结构

我们在定义结构的时候可以选择不同的方法
(1)声明类型之后声明变量。
例:

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

(2)声明类型的同时声明变量。

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

(3)直接声明结构类型变量

struct   //没有了结构类型标识符
{char name[10];
 long code;
 double salary;
 char address[50];
 char phone[20];
}            //该处也没有;
worker1,worker2,*Emp;

注意 在结构体内定义字符数组的时候,使用“cin>>”无法输入带有空格的名字,比如"Tom Holland ",所以我们要使用cin.get的输入方式。

定义结构说明

(1)结构变量占有一片连续内存空间,具有结构类型的特征。

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

worker1== *Emp
Wang Li
991083456
1200.5
guang zhou
87111111
如果这时候查一下内存,我们会发现内存是连续的。
在这里插入图片描述
(2)一个结构类型的成员可以是另一个已定义的结构类型
例:
为职工结构添加出生日期信息
类型和变量声明为:

struct  date
{  
 int  month ;
 int  day ;
 int  year ;
} ;
struct employee
{  
   char  name[10] ;
   date  birthday ;	//这里就可以使用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 ;

(3)声明结构类型变量可以同时初始化
如:

struct employee
{  char  name[10];
    long  code;
    double  salary;
    char address[50];
    char  phone[11];
}  worker={"Wang Li ",991083456,1200.5,"guang zhou ","87111111" } ;//同时初始化;

访问结构

(1)访问结构变量的成员 结构变量.成员 用点运算符访问。
例:

# 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 ;
}

(2)用指针访问结构变量的成员
1.结构指针->成员
例:

# 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 ;
}

2.(结构指针).成员。
因为“.”的运算优先级比“结构指针”要高,所以要把结构指针()起来
*
例:

# include <iostream>
using namespace std ;
# include <cstring>
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.类型相同的结构变量可以整体赋值

# include <iostream>
using namespace std ;
struct  weather
{
    double  temp;
    double  wind;
} yesterday;              
int main ( )
{
    weather  today ; 
    yesterday.temp=10.5;
    yesterday.wind=3.1;
    today=yesterday;	 // 结构变量整体赋值。
    cout<<"Temp="<<today.temp<<endl;
    cout<<"Wind="<<today.wind<<endl;
}

注意&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值