数据封装---结构体

定义:

struct  结构体类型名

{

字段声明;

};

在定义结构体类型时,字段名可与程序中的变量名相同,在不同的结构体中也可以有相同的字段名,而不会发生混淆

结构体的成员的类型可以是任意类型,可以是整型,可以是整型、实型、也可以是数组,当然也可以是其他结构体类型。

事实上,一旦定义了一个结构体类型的变量,系统在分配内存时就会分配一块连续的空间,一次存放它的每一个分量,这块空间总的名字就是该变量的名字,每一小块还有自己的名字,即字段名;

定义结构体:

Student stu1;       //Student是结构体类型名

stu1.chinese;      //访问stu1中的chinese的字段

与普通变量一样,结构体除了可以通过变量名直接访问外也可以通过指针间接访问,指针结构体的指针定义与普通指针定义一样:

结构体类型名  *指针变量名;

也可以在定义结构体类型时直接定义指针变量:

struct  结构体类型吗

{

字段声明;

}  *结构体指针;


Student   stu1,*sp=&stu1;

sp=new Student;

访问字段名方法(2种):

(*sp).name;

sp->name;


结构体数组:

Student   stuArray[10];

stuArray[1].name;

实例:

#include<iostream>
#include<cmath>
using namespace std;
struct pointT
{
double x,y;
};
pointT setPoint(double x,double y)
{
pointT p;
p.x=x;
p.y=y;
return p;
}
double getX(pointT &p)
{
return p.x;
}
double getY(pointT &p)
{
return p.y;
}
void showPoint(const pointT &p)
{
cout<<"("<<p.x<<","<<p.y<<")";
}
double distancePoint(const pointT &p1,const pointT &p2)
{
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
int main(void)
{
pointT p1,p2;
p1=setPoint(1,1);
p2=setPoint(2,2);
cout<<getX(p1)<<"  "<<getY(p2)<<endl;
showPoint(p1);
cout<<" - >";
showPoint(p2);
cout<<" = "<<distancePoint(p1,p2)<<endl;
return 0;
}

结果:

1  2
(1,1) - >(2,2) = 1.41421
请按任意键继续. . .


简单链表实例:

#include<iostream>
#include<cmath>
using namespace std;
struct linkRec
{
int data;
linkRec *next;
};


int main(void)
{
int x;
linkRec *head,*p,*rear;
head=rear=new linkRec;
while(true)
{
cin>>x;
if(x==0)
break;
p=new linkRec;
p->data=x;
rear->next=p;
rear=p;
}
rear->next=NULL;
cout<<"链表的内容为:"<<endl;
p=head->next;
while(p!=NULL)
{
cout<<p->data<<'\t';
p=p->next;
}
cout<<endl;
return 0;
}

结果:

1
2
3
4
0
链表的内容为:
1       2       3       4
请按任意键继续. . .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值