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;
}
注意&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&