C++ 结构体

 

结构体定义

整型、长整数、字符型、浮点型这些数据类型只能记录单一的数据,而且这些数据类型只能被 称作基础的数据类型。如果要描述一个人的信息,就需要定义多个变量来记录这些信息,例如身高需要一个变量,体重需要一个变量,姓名需要一个变量,年龄需要一个变量,性别需要一个变量。如果可以将这些变量包含在一起则会大大减少程序代码的离散性,使程序代码阅读更加符合逻辑。而结构体则是实现这一功能的类型。结构体大小就是结构体成员大小之和

struct 结构体名
{
    成员类型 成员名;
    成员类型 成员名;
}

说明:结构体和数组的区别:结构体由多个不同类型的数据组成的数据集合,而数组是相同元素的集合

结构体变量声明

第一种声明形式是在定义结构体后,使用结构体后,使用结构体类型名声明。

struct Per
{
    int index;
};
Per pPer;

第二种是定义结构体时直接声明。

struct Person{int index;} pInfo;

直接声明结构体变量是,可以声明多个变量。

int main(){

struct PersonInfo
	{

		int index;
		char name[30];
		short age;

	}  pInfo1,pInfo2;

    return 0;
}

结构体成员及初始化

引用结构体成员的两种方式,一种是声明结构体变量后,通过成员运算符“ . ”引用;一种是声明结构体指针变量,使用指向“ : ”运算符引用

(1)使用“  .  ”引用结构体成员,一般如下:

结构体变量名.成员名

struct PersonInfo
{
    int index;
    char name[30];
    short age;
}pInfo;

pInfo.index = 0;
strcpy_s(pInfo.name,"小三");
pInfo.age = 20;

cout<<pInfo.index<<endl;

说明:其中为字符串赋值的需要使用strcpy_s字符串复制函数

结构体可以在定义时直接对结构体变量赋值:

struct Person
{

    int index;
    char name[30];
    short age;
}Info={0,"小三",20};

(2)在定义结构体时,可以同时声明结构体指针变量

struct  PersonInfo
{
    int index;
    char name[30];
    short age;
} *pPersonInfo;

//访问成员数据

pPersonInfo->index;

例子:

struct Person
	{
		int index;
		char name[30];
		short age;
	}*pPerson, Person = {0,"小三",30};
	pPerson = &Person;
	
	cout << pPerson->age << endl;
	cout << pPerson->index << endl;
	cout << pPerson->name << endl;

 

结构体的嵌套

定义完结构体后就形成一个新的数据类型,C++语言在定义结构体时可以声明其他已经定义好的结构体变量,也可以在定义结构体时定义子结构体

(1)在定义时声明其他已经定义好的结构体变量:

struct PersonInfo
{
    int index;
    char name[30];
    struct WorkPlace
    {
        char Addrees[150];
        cahr PostCode[30];
    };
};

(2)在结构体中定义子结构体:

struct WorkPlace
{
    char Addrees[150];

};


struct PersonInfo
{
    int index;
    char name[30];
    WorkPlace myWorkPlace;
};

结构体的嵌套使用:

#include <iostream>
using namespace std;


int main()
{
    struct PersonInfo
    {
        int index;
        char name[30];
        short age;
        struct WorkPlace  //嵌套的结构体
        {
            char Address[150];
            char PostCode[30];
            char GateCode[50];
            char Street[100];
            char Area[50];    
        } WP;
    
    };
    
    PersonInfo pInfo;
    strcpy_s(pInfo.WP.Address,"House"); //必须要用字符串拷贝
    strcpy_s(pInfo.WP.PostCode,"100000");
    strcpy_s(pInfo.WP.GateCode,"302");
    strcpy_s(pInfo.WP.Street,"Lan Tian");
    strcpy_s(pInfo.WP.Area,"china");

    cout<<pInfo.WP.Address<<endl;
    


    return 0;
}

结构体变量做函数的参数

#include <iostream>
using namespace std;


struct PersonInfo
{
    int index;
    char name[30];
    short age;
};

void ShowStructMessage(struct PersonInfo MyInfo)
{

    cout<<MyInfo.index<<endl;
}

int main()
{

    PersonInfo pInfo;
    pInfo.index = 0;
    strcpy_s(pInfo.name,"小三");
    pInfo.age = 20;
    
    ShowStructMessage(pInfo);
    
    return 0;
}

结构体指针做函数参数

#include <iostream>
using namespace std;


struct PersonInfo
{
    int index;
    char name[30];
    short age;
};


void ShowStructMessage(struct PersonInfo *pInfo)
{
    cout<<pInfo->index<<endl;
}

int main()
{

    PersonInfo Info;
    Info.index = 0;
    strcpy_s(Info.name,"小三");
    Info.age = 30;
    ShowStructMessage(&Info);
    return 0;
}

结构体数组

数组元素也可以是结构类型的元素,因此可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下标结构变量。

定义结构数组变量如下:

struct PersonInfo { int index;} Person[5];




struct PersonInfo {int index;} pInfo;

PersonInfo Person[5];




struct PersonInfo 
{
    int index;
    char name[30];

}Info[5] = {{0,"一"},{1,"二"},{2,"三"},{3,"四"},{4,"五"}};

说明:当对全部元素做初始化赋值时,可以不用给出数组长度

使用指针访问结构体数组

#include<iostream>
using namespace std;

int main()
{
    struct PersonInfo{int index;char name[30];short age;}Person[5] = {{1,"一",20},{2,"二",21},{3,"三",22},{4,"四",23},{5,"五",24}};


    struct PersonInfo *pPersonInfo;
    
    pPersonInfo  = Person; //等同于把数组中的第一个元素的地址赋值给了指针pPersongInfo
    
    for(int i = 0;i<5;i++,pPersonInfo++) //pPersonInfo++就是地址向下一个元素移动
    {
        cout<<pPersonInfo->index<<endl;
    }
    return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CID( ͡ _ ͡°)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值