5、结构体定义

  结构体是用户带定义的类型,而结构声明定义了这种类型的数据属性。定义了类型后,便可以创建这种类型的变量,因此创建结构包括两步。首先,定义结构描述——它描述并标记了能够存储在结构中的各种数据类型。然后按描述创建结构变量(街噶偶数据对象)。

5.1、定义结构后,便可以创建这种类型的变量了:

inflatable hat;
inflatable woopie_cushion
inflatable mainframe

如果熟悉C语言中的结构,则可能已经注意到了,C++允许在声明结构变量省略关键字struct:

struct inflatable goose;   //C语言结构体对象声明,与C++结构体声明都可以
inflatable Vincent; //只有C++结构体声明可以用

 由于hat的类型是inflatable,因此可以使用成员运算符(.)来访问各个成员。例如,hat.volume指的是结构的volume成员,hat.privce,指的是price成员。

#include "stdafx.h"
#include <iostream> //引用库函数
using namespace std; //使用命名空间 struct inflatable
{
char name[20];
float volume;
double price;
}; int main() //主函数,程序执行的入口
{
inflatable guest = //结构体初始化
{
"Glorios Gloria", //这里的顺序必须要与结构体定义顺序一致
1.88,
29.99
}; //这里必须要加分号
inflatable pal =
{
"wanghong",
3.12,
32.99
};
cout << "Expand your guest list with" << guest.name;
cout << "and" << pal.name << "!\n";
cout << "you can have both for $";
cout << guest.price + pal.price << ".\n";
cin.get();
return 0; //函数返回值
}

  结果:

程序说明:

5.2、结构体初始化

  与数组一样,C++也支持将列表初始化用于结构,且等号(=)是可选的:

inflatable duck {“Daphne”,0.12,6.64}

  其次如果大括号为包含任何东西,各个成员将被设置为零,

inflatable duck {};       //结构体内所有值为零
//最后,不允许缩窄变换。

5.3、结构体将string 类作为成员

#include <string>
struct inflatable
{
std::string name; //一定要让结构定义能够访问名称空间std
float volume:
double price;
};

5.4、其他结构类型

  C++使用户定义的类型与内置类型尽可能的相似,例如,可以将结构体作为参数传递给函数,也可以让函数返回一个结构体。另外,还可以使用赋值运算符(=)将结构体赋值给另一个同类型的结构。这样结构中每个成员都将被设置为另一个结构中相应成员的值,即使是数组。这种赋值称为成员赋值

inflatable doubj
{
“asfdasf”,
0.52,
12.51
} inflatable choice;
choice = doubj;//成员赋值

 可以同时完成结构体创建和创建结构体对象的工作(将变量名放在结束括号的后面即可):

struct perks
{ int key_number;
char car[12]; }mr_smith,ms_jones;//两个结构体对象。

甚至可以初始化以这种方式创建的变量:

struct perks
{ int key_number;
char car[12]; }mr_smith =
{
7,
"dsfasdasd"
};

  然而,将结构体定义和变量声明分开,可以是程序更容易于阅读与理解。

5.5、结构数组

inflatable—结构包含一个数组(name)。也可以创建元素为结构体的数组,方法和创建基本类型数组完全相同。例如,要创建一个包含100个inflatable结构的数组,可以这样做:

inflatable gifts[100];//100 个inflatable结构体数组

  这样gifts将是一个inflatable数组,其中的每个元素(如gifts[0]或gifts[99])都是inflatable对象可以与成员运算符一起使用。

cin>>gifts[0].volume;
cout<<gifts[99].price<<endl;

  记住gifts本身是一个数组,而并不是结构体,因此像gifts。price这样的表述是无效的。

#include "stdafx.h"
#include <iostream> //引用库函数
using namespace std; //使用命名空间 struct inflatable
{
char name[20];
float volume;
double price;
}; int main() //主函数,程序执行的入口
{
inflatable guests[2]=
{
{"Bambi",0.5,21.55},
{"Goodzilla",2000,654.214}
};
cout << "The guests" << guests[0].name << "and" << guests[1].name
<< "\nhave a combined volume of "
<< guests[0].volume + guests[1].volume << " cubic feet.\n";
cin.get();
return 0; //函数返回值
}

  结果:

5.6、结构体中的位字段

  与C语言一样,C++也允许指定占用特定位数的结构成员,这使得创建于某个硬件设备上的寄存器对应的数据结构非常方便。字段的类型为整型或枚举类型,接下来是冒号,冒号后面是一个数字,它指定了使用的位数。可以使用没有名称的字段来提供间距。每个成员都被称为字段。下面是一个例子:

struct torgle_register
{
unsigned int SN : 4; //4 bit 为SN的值
unsigned int : 4; //4 bit为空白的占位
bool goodIn :1;
bool goodTorgle : 1;
}

  初始化结构体,和访问结构体与标准方法相同。

5、C++结构体的使用的更多相关文章

  1. Go结构体实现类似成员函数机制

    Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...

  2. C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱

    一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...

  3. go语言结构体

    定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...

  4. C语言中的结构体

    用户自己建立自己的结构体类型 1.  定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...

  5. C++_系列自学课程_第_12_课_结构体

    #include <iostream> #include <string> using namespace std; struct CDAccount { double bal ...

  6. java socket传送一个结构体给用C++编写的服务器解析的问题

    另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...

  7. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  8. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. C语言结构体对齐

    1.结构体变量中的元素如何访问? (1)数组中元素的访问方式:表面上有2种方式(数组下标方式和指针方式):实质上都是指针方式访问.(2)结构体变量中的元素访问方式:只有一种,用.或者->的方式来 ...

  10. C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

    类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...

随机推荐

  1. LINUX的SSH下FTP到远程服务器Entering Passive Mode失败解决

    LINUX 系统FTP连接远程服务器经常出现在传输文件或者发出 ls命令时候出现 "Entering Passive Mode "然后就再也无法运作了.该工作主要是因为LINUX的 ...

  2. Make Cents

    Every year, an elephant qualifies to the Arab Collegiate Programming Competition. He graduated this ...

  3. 【284】◀▶ arcpy.da & arcpy 数据访问模块

    使用游标访问数据 数据访问模块 (arcpy.da) 参考: ArcGIS Python编程案例(9)-ArcPy数据访问模块 读取几何 写入几何 使用 Python 指定查询 01   da.Sea ...

  4. typedef&nbsp;struct与struct的区别

    typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据 ...

  5. 【更多教程关注公众号全要买】1-2 Disruptor与BlockingQueue压力测试性能对比

    JDK所提供的BlockingQueue替换成Dis

  6. error:crosses initialization of ...的解决办法

    switch(c) { case 0x01: int temp = a + b; .... break; case 0x02: break; default:break; } 此时会报如题所示错误 原 ...

  7. Linux常用基本命令 1

    useradd 创建用户. password 修改密码. date 查看时间 man date 帮助文档.f往后翻 b往前翻 q退出.软修改 man hwclock 修改硬件时钟, cal 查看日历 ...

  8. 728. Self Dividing Numbers可以自己除以自己的数字

    [抄题]: A self-dividing number is a number that is divisible by every digit it contains. For example, ...

  9. 基于Ubuntu16搭建Hadoop大数据完全分布式环境

    [目的]:学习大数据 在此记录搭建大数据的过程. [系统环境] 宿主机操作系统:Win7 64位 虚拟机软件:Vmware workstation 12 虚拟机:Ubuntu 16 64位桌面版 [步 ...

  10. 多重if else和switch case的区别

    int main(void) { int id; scanf_s("%d",&id); switch(id) { case 2: printf("John\n&q ...