博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ struct,union和enum
阅读量:6227 次
发布时间:2019-06-21

本文共 3254 字,大约阅读时间需要 10 分钟。

struct

struct是一组数据元素一个名字,这些数据元素,作为成员,可以有不同类型和不同长度。C++声明struct语法如下:

struct structure_name {

member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;

简单示例如下:

struct product {
int weight; float price; } ; product apple; product banana, melon;

声明struct并定义多个实例:

struct product {
int weight; float price; } apple, banana, melon;

完整struct例子:

// example about structures #include 
#include
#include
using namespace std; struct movies_t {
string title; int year; } mine, yours; void printmovie (movies_t movie); int main () {
string mystr; mine.title = "2001 A Space Odyssey"; mine.year = 1968; cout << "Enter title: "; getline (cin,yours.title); cout << "Enter year: "; getline (cin,mystr); stringstream(mystr) >> yours.year; cout << "My favorite movie is:\n "; printmovie (mine); cout << "And yours is:\n "; printmovie (yours); return 0; } void printmovie (movies_t movie) {
cout << movie.title; cout << " (" << movie.year << ")\n"; }

 

struct和指针

struct movies_t {
string title; int year; }; movies_t amovie; movies_t * pmovie; pmovie = &amovie;

完整示例如下:

// pointers to structures #include 
#include
#include
using namespace std; struct movies_t {
string title; int year; }; int main () {
string mystr; movies_t amovie; movies_t * pmovie; pmovie = &amovie; cout << "Enter title: "; getline (cin, pmovie->title); cout << "Enter year: "; getline (cin, mystr); (stringstream) mystr >> pmovie->year; cout << "\nYou have entered:\n"; cout << pmovie->title; cout << " (" << pmovie->year << ")\n"; return 0; }

 

内部struct

struct movies_t {
string title; int year; }; struct friends_t {
string name; string email; movies_t favorite_movie; } charlie, maria; friends_t * pfriends = &charlie;

使用如下:

charlie.name maria.favorite_movie.title charlie.favorite_movie.year pfriends->favorite_movie.year

union

union允许以不同的数据类型访问相同的内存,因为他们实际上是在内存中的相同位置,它的声明和struct差不多,但功能完全不同:

union union_name {
member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . } object_names;

union声明的所有元素在内存中占有相同的物理空间,其大小是该声明的最大元素的大小:

union mytypes_t {
char c; int i; float f; } mytypes;

 

每一个不同的数据类型。由于所有的元素都指的是内存中的同一位置,修改的内容之一,会影响其他元素的内容。

 

匿名union

struct和正常union

struct {
char title[50]; char author[50]; union {
float dollars; int yen; } price; } book;

struct和匿名union

struct {
char title[50]; char author[50]; union {
float dollars; int yen; }; } book;

第一种类型的访问方式,如下:

book.price.dollars book.price.yen

第二种类型的访问方式,如下:

book.dollars book.yen

 

enum

  定义枚举类型的基本语法:

enum enumeration_name {  value1,  value2,  value3,  .  .} object_names;

例如:

enum Week {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY};

其中SUNDAY = 0,MONDAY = 1……SATURDAY = 6。也就是说,第1个枚举值代表0,第2个枚举值代表1,这样依次递增1。

也可以在定义时,直接指定某个或某些枚举值的数值,例如:

enum Week {MONDAY = 1,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY};

其中MONDAY等于1,这样,TUESDAY就将等于2,直接到SUNDAY等于7。

 

声明枚举变量:

Week today = TUESDAY;

 

枚举值,我们就称为格举常量,因为它一经定义以后,就不可再改变,以下用法是错误的!

TUESDAY = 10; //错误!我们不能改变一个枚举值的数值。

转载于:https://www.cnblogs.com/ggjucheng/archive/2011/12/13/2287009.html

你可能感兴趣的文章
ElasticSearch 2 (32) - 信息聚合系列之范围限定
查看>>
VS2010远程调试C#程序
查看>>
[MicroPython]TurniBit开发板DIY自动窗帘模拟系统
查看>>
由String类的Split方法所遇到的两个问题
查看>>
Python3.4 12306 2015年3月验证码识别
查看>>
从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
查看>>
windows查看端口占用
查看>>
Yii用ajax实现无刷新检索更新CListView数据
查看>>
JDBC的事务
查看>>
Io流的概述
查看>>
App 卸载记录
查看>>
JavaScript变量和作用域
查看>>
开源SIP服务器加密软件NethidPro升级
查看>>
《别做正常的傻瓜》的一些读书心得
查看>>
作业:实现简单的shell sed替换功能和修改haproxy配置文件
查看>>
Altium 拼板方法以及 注意的 地方
查看>>
PMP考试的过与只是
查看>>
java 监控 收集资料3(收集中)
查看>>
Apache Pulsar中的地域复制,第1篇:概念和功能
查看>>
getRealPath()和getContextPath()的区别
查看>>