c++2017-6-22结构、联合与枚举

#include <iostream>
using namespace std;

struct Address{
 const char* name;
 int number;
 const char* street;
 const char* town;
 char state[2];
 const char* zip;
};

//不同的结构体布局,会影响结构体的内存容量

struct Readout1{
 char hour;
 int value;
 char seq;
};

//不同的结构体布局,会影响结构体的内存容量

struct Readout2{
 int value;
 char hour;
 char seq;
};
//struct指针解引用 ->
void print_addr(Address* p){
 cout << p->name << '\n'
  << p->number << ' ' << p->street << '\n'
  << p->town << '\n'
  << p->state[0] << p->state[1] << ' ' << p->zip << '\n';
}

//引用的方式传递struct,使用.运算符
void print_addr1(Address& r){
 cout << r.name << '\n'
  << r.number << ' ' << r.street << '\n'
  << r.town << '\n'
  << r.state[0] << r.state[1] << ' ' << r.zip << '\n';
}

void main(){
 Address jd = {
  "Jim Dandy", 61, "South St",
  "New Providence", { 'N', 'J' }, "07974"
 };
 cout << sizeof(Readout1) << '\n';
 cout << sizeof(Readout2) << '\n';
 //print_addr(&jd);
 //print_addr1(jd);
}


结构与数组-----标准库array--------------多研究MSDN(原因是那里面是具体的规则)------指定的条目,然后按F1


联合

union是一种特殊的struct,使用union的目的无非是让数据更紧密,从而提高程序的性能,但使用union的代码更容易出错,因此最好不要使用union在你的代码中。


枚举

#include <iostream>
using namespace std;
#include <array>
#include <initializer_list>

struct Address{
 const char* name;
 int number;
 const char* street;
 const char* town;
 char state[2];
 const char* zip;
};

struct Readout1{
 char hour;
 int value;
 char seq;
};

struct Readout2{
 int value;
 char hour;
 char seq;
};

struct Point{
    int x, y;
 //Point(int x, int y);    //构造函数
 //Point(int x, int y){};
};

//struct Array{          //[Array]struct包含数组,而且这个数组是[Point]struct的数组
// Point elem[3];
//};

//struct指针解引用 ->
void print_addr(Address* p){
 cout << p->name << '\n'
  << p->number << ' ' << p->street << '\n'
  << p->town << '\n'
  << p->state[0] << p->state[1] << ' ' << p->zip << '\n';
}

//引用的方式传递struct,使用.运算符
void print_addr1(Address& r){
 cout << r.name << '\n'
  << r.number << ' ' << r.street << '\n'
  << r.town << '\n'
  << r.state[0] << r.state[1] << ' ' << r.zip << '\n';
}

//enum class枚举类型
enum class Person{
 Chinese,American,English
};

void main(){
 Address jd = {
  "Jim Dandy", 61, "South St",
  "New Providence", { 'N', 'J' }, "07974"
 };
 /*cout << sizeof(Readout1) << '\n';
 cout << sizeof(Readout2) << '\n';*/
 //print_addr(&jd);
 //print_addr1(jd);
 Point points[3]{{1,2}, {3,4}, {5,6}};  //[Point]struct的数组声明及定义
 int x2 = points[2].x;
 cout << x2 << '\n';
 //Array points2{{1,2},{3,4},{5,6}};-------这是个问题,不要陷入细节
 //int y2 = points2.elem[3].y;
 //cout << y2 << '\n';

 //用上面的时候出现问题,接下来我们就用标准库中的array进行工作
 using Array = array<Point, 3>;    //这里需要#include <array>,包含3个Point类型的array

 //initializer_list<Array> points2{ { 1, 2 }, { 3, 4 }, { 5, 6 } };

 Array points2;
 //{ { 1, 2 }, { 3, 4 }, { 5, 6 } };
 points2[0] = { 1, 2 };
 points2[1] = { 3, 4 };
 points2[2] = { 5, 6 };

 Person per = Person::American;
 switch (per){
 case Person::Chinese:
  cout << "中国人" << endl;
  break;
 case Person::American:
  cout << "美国人" << endl;
  break;
 case Person::English:
  cout << "英国人" << endl;
  break;
 default:
  break;
 }


}











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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值