这一篇主要说一下结构体的基础问题!
结构体是C语言里面的东东,但是c++为了兼容C故而也有结构体这个东东保留下来了
为了好说明 先引入一个简单的结构体
#include <string>
#include <iostream>
using namespace std;
struct birthday
{
int day ;
int month ;
int year ;
};
struct StrutDemo01
{
string name ;
int num ;
char sex ;
int age ;
float score ;
birthday bir ; //结构体中的结构体成员
};
1→结构体的定义
(如上)
2→结构体的初始化
// 第一种初始化
struct StrutDemo01 demo = {"AA", 002 ,'T',10,10.0,{1,1,1}};
// 第二种初始化
struct StrutDemo01 demo ;
demo.name ="abcd";
demo.num = 001 ;
demo.sex ='M';
demo.age =1;
demo.score =100.0;
3→结构体变量的引用
这里讲一下结构体可以转化为三种方式
① :struct StrutDemo01 demo ; //原始引用
②: struct StrutDemo01 demo ;//指针模式
struct StrutDemo01 *p_demo = &demo;
③: struct StrutDemo01 demo ; //引用模式
struct StrutDemo01 & y_demo = demo ;
然后可以分别使用这三种方式去引用结构体变量的成员
demo.num ;
p_demp->num;
y_demo .num ;
4→结构体类型做函数参数(重点)
如3所述我们可以吧结构体转化为三种模式则函数的参数对应也可以使用这三种模式了。对应代码见最下面:
5→动态分配结构体内存和销毁
动态建立内存使用new ,销毁使用delete
完整demo
// 头文件
#include <iostream>
#include <string>
#include "StrutDemo01.cpp" ;
using namespace std ;
void print(StrutDemo01 ,string flag);
void print_p(StrutDemo01* ,string flag);
void print_y(StrutDemo01& ,string flag);
void dymanicStruct(StrutDemo01* ,string flag); //动态分配内存以及销毁
//cpp
#include "StructDemo.h"
int main( void )
{
struct StrutDemo01 demo = {"AA", 002 ,'T',10,10.0,{1,1,1}}; //第一种初始化
/* 第二种初始化
demo.name ="abcd";
demo.num = 001 ;
demo.sex ='M';
demo.age =1;
demo.score =100.0;*/
StrutDemo01 * pdemo =&demo ;
print_y(demo,"------通过引用访问结构体------" );
print_p(pdemo,"------通过指针访问结构体------");
print(demo,"------通过结构体名访问结构体------");
dymanicStruct(pdemo,"------动态访问结构体------");
return 0;
}
void dymanicStruct(StrutDemo01* demo ,string flag)
{
demo = new StrutDemo01; //返回的是一个指针
demo->name ="dymanic" ;
demo->age = 10;
demo->num = 10;
demo->score =10;
demo->sex = 'M';
demo->bir.year =2011 ;
demo->bir.month =10;
demo->bir.day = 10;
print_p(demo ,flag );
delete demo; //销毁内存
}
void print_y(StrutDemo01 &demo ,string flag) //通过引用访问
{
cout<<flag<<endl;
cout<<"name : "<<demo.name <<"\nnum : "<<demo.num<<"\nsex : "<<demo.sex<<"\nscore : " <<demo.score<<"\nbir :"<<demo.bir.year <<"-"<<demo.bir.month<<"-"<<demo.bir.day
<<endl;
}
void print_p(StrutDemo01 * demo ,string flag) //通过指针访问
{
cout<<flag<<endl;
cout<<"\nname : "<<demo->name <<"\nnum : "<<demo->num<<"\nsex : "<<demo->sex<<"\nscore : " <<demo->score<<"\nbir :"<<demo->bir.year <<"-"<<demo->bir.month<<"-"<<demo->bir.day
<<endl;
}
void print(StrutDemo01 demo ,string flag) //通过结构体名访问
{
cout<<flag<<endl;
cout<<"name : "<<demo.name <<"\nnum : "<<demo.num<<"\nsex : "<<demo.sex<<"\nscore : " <<demo.score<<"\nbir :"<<demo.bir.year <<"-"<<demo.bir.month<<"-"<<demo.bir.day
<<endl;
}
//结构体
#include <string>
#include <iostream>
using namespace std;
struct birthday
{
int day ;
int month ;
int year ;
};
struct StrutDemo01
{
string name ;
int num ;
char sex ;
int age ;
float score ;
birthday bir ; //结构体中的结构体成员
};
完整的demo下载 (免积分)http://download.csdn.net/detail/pdw_jsp/4010573
小弟以前是做java的,对c++学习不久。希望有什么问题提出来,小弟感激不尽。。。。。。