【1】结构体的基本功

  注意结构体里面可以有很多东西,可以结构体里面包含结构体

#include<iostream>
using namespace std;
struct Date
{
int month;
int day;
int year;
}; struct Student
{
int num;
char name[];
char sex;
Date birthday;
float score;
}student1,student2= {,"wangli",'f',,,,89.5}; int main()
{
student1 = student2;
cout<<student1.num<<endl;
cout<<student1.name<<endl;
cout<<student1.sex<<endl;
cout<<student1.birthday.month<<endl;
cout <<student1.birthday.year<<endl;
cout<<student1.score<<endl;
return ;
}

【2】结构体数组的应用

例7.2 对候选人得票的统计程序。设有3个候选人,
最终只能有1人当选为领导。今有10个人参加投
票,从键盘先后输入这10个人所投的候选人的名
字,要求最后输出这3个候选人的得票结果。

#include<iostream>
#include<string.h>
using namespace std;
struct Person
{
char name[];
int count;
};
int main()
{
Person leader[] = {"li",,"zhang",,"fun",};
int i,j;
char leader_name[];
for(i = ;i<;i++)
{
cin>>leader_name;
for(j=;j<;j++)
{
if(strcmp(leader_name,leader[j].name)==)
leader[j].count++;
}
cout<<endl;
}
for(i=;i<;i++)
{
cout<<leader[i].name<<":"<<leader[i].count<<endl;
}
return ;
}

用7.1.7 动态分配和撤销内存的运算符new delete

#include<iostream>
#include<string>
using namespace std; struct Student
{
string name;
int num;
char sex;
}; int main()
{
Student *p;
p = new Student;//用new开辟一个存放Student型的数据空间
p->name = "wang Fun";
p->num = ;
p->sex = 'm'; cout<<p->name<<endl<<p->num<<endl<<p->sex<<endl;
delete p;//撤销该空间
return ;
}

【3】共用体的几个特点:

  (1) 使用共用体变量的目的是希望用同一个内存段  
  存放几种不同类型的数据。但请注意: 在每一瞬
  时只能存放其中一种,而不是同时存放几种。
  (2) 能够访问的是共用体变量中最后一次被赋值的
  成员,在对一个新的成员赋值后原有的成员就失去
  作用。
  (3) 共用体变量的地址和它的各成员的地址都是同  
  一地址。
  (4) 不能对共用体变量名赋值;不能企图引用变量
  名来得到一个值;不能在定义共用体变量时对它初
  始化;不能用共用体变量名作为函数参数。

  例7.7 设有若干个人员的数据,其中有学生和教师。
  学生的数据中包括: 姓名、号码、性别、职业、
  年级。教师的数据包括: 姓名、号码、性别、职
  业、职务。可以看出,学生和教师所包含的数据是
  不同的。现要求把它们放在同一表格中,见图7.13

#include<iostream>
#include<string>
#include<iomanip>
using namespace std; struct
{
int num;
char name[];
char sex;
char job;
union P
{
int grade;
char position[];
}category; }person[]; int main()
{
int i;
for(i=;i<;i++)
{
cin>> person[i].num>>person[i].name>>person[i].sex>>person[i].job;
if(person[i].job == 's')
{
cin>>person[i].category.grade;
}
else
{
cin>>person[i].category.position;
}
} cout<<endl<<"NO. name sex job grade/person"<<endl; for(i =;i<;i++)
{
if(person[i].job == 's')
{
cout<< person[i].num<<setw()<<person[i].name<<" "<<person[i].sex<<" "<<person[i].job<<setw()<<person[i].category.grade<<endl; }
else
{
cout<<person[i].num<<setw()<<person[i].name<<" "<<person[i].sex<<" "<<person[i].job<<setw()<<person[i].category.position<<endl;
}
} return ;
}

【4】typedef的使用规则

  (1) typedef
  typedef可以声明各种类型名,但不能用来定义
  typedef变量。用typedef可以声明数组类型、字符串类型,
  使用比较方便。
  (2) 用typedef只是对已经存在的类型增加一个类型
  名,而没有创造新的类型。
  (3) 当在不同源文件中用到同一类型数据(尤其是  
  像数组、指针、结构体、共用体等类型数据)时,
  常用typedef声明一些数据类型,把它们单独放在一
  个头文件中,然后在需要用到它们的文件中用#
  include命令把它们包含进来,以提高编程效率。
  (4) 使用typedef有利于程序的通用与移植。有时程
  序会依赖于硬件特性,用typedef便于移植

C++程序设计之结构体,共用体,枚举和typedef的更多相关文章

  1. C++结构、共用体、枚举

    一.结构 结构是C++OOP的基石.学习有关结构的知识僵尸我们离C++的核心OOP更近. 结构是用户定义的类型,同一个结构可以存储多种类型数据,这使得将一个事物的不同属性构成一个对象成为了可能.另外C ...

  2. 5、数组&字符串&结构体&共用体&枚举

    程序中内存从哪里来 三种内存来源:栈(stack).堆(heap).数据区(.date): 栈(stack) 运行自动分配.自动回收,不需要程序员手工干预: 栈内存可以反复使用: 栈反复使用后,程序不 ...

  3. C语言高级-结构,共用体,文件,链表

    C语言结构 标准声明方式 struct student{        int age;        char sex;    }; 这个可以在main函数中定义:  struct student ...

  4. 瘋子C语言笔记(结构体/共用体/枚举篇)

    (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...

  5. C++复合类型(结构,共用体,枚举)

    •结构是用户定义的类型,而结构的声明定义了这种类型的数据属性. 一.关键字struct声明:   定义了一种新类型 struct inflatable{ char name[20];//结构成员 fl ...

  6. C语言基础 (11) 结构体 ,共用体 枚举 typedef

    1 课堂回顾 作用域与生命周期 2 static 局部变量 2 打字游戏 3 内存分区代码分析 4 结构体基本操作 (复合类型[自定义类型 #include <stdio.h> #incl ...

  7. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

  8. C基础知识(8):结构体、共用体、位域

    结构体 数组允许定义可存储相同类型数据项的变量,而结构体是C编程中另一种用户自定义的可用的数据类型,它允许用户可以存储不同类型的数据项. struct 语句的格式如下: struct [structu ...

  9. C语言------结构体和共用体

    仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3.源代码及运行截图 4 .小结 1 .实训名称 实训8:结 ...

  10. 【C语言入门教程】7.4 共用体

    7.4 共用体 共用体又称为联合体,是由不同的数据类型组成的一个整体.与结构体不同的是,共用体每次只能使用其中一个成员.结构体的总长度是结构体所有成员长度之和,共用体的总长度是其中最长一个数据类型的长 ...

随机推荐

  1. [转] 软件定义网络(SDN) 的应运而生

    原文见51CTO:http://network.51cto.com/art/201103/251425.htm 2012的故事 2012年的某天,你跟往常一样起床,打开电脑,却发现无法登录到邮箱.无法 ...

  2. ORA-12560: TNS: 协议适配器错误 解决

    传统方法: 大多数网站都有记载三个方法解决 但是出现上述错误另一个原因: 刚刚安装的Oracle 里面的账户都是锁定的 需要解锁 见如下的Oracle11g安装过程 http://www.2cto.c ...

  3. SaaS系列介绍之十三: SaaS系统体系架构

    1 系统体系架构设计 软件开发中系统体系架构决定了一个系统稳定性.健壮性.可扩展性.兼容性和可用性,它是系统的灵魂.体系架构是架构师所关注的核心.良好的体系架构是系统成功的开端,否则,再好的代码与设计 ...

  4. SQL Server Profiler监控SQL Server性能

    全面掌握SQL Server Profiler 1.       原理与相关概念介绍 SQL Server Profiler,大家已经非常熟悉.常常在性能优化中使用,本文档详细介绍SQL Server ...

  5. sed and awk学习笔记

    sed and awk 背景 awk起源追溯至sed和grep,进而追溯至共同的行编辑器ed.实用工具grep来源于ed命令:g/re/p .实用工具awk和sed有一个共同的选项-f用于指定脚本的名 ...

  6. Android ActionBar中的下拉菜单

    在ActionBar中添加下拉菜单,主要有一下几个关键步骤: 1. 生成一个SpinnerAdapter,设置ActionBar的下拉菜单的菜单项 2. 实现ActionBar.OnNavigatio ...

  7. 在Hadoop伪分布式模式下安装Hive(derby,mysql)

    我的Hadoop版本是1.2.0,mysql版本是5.6.12. 先介绍一下嵌入式derby模式: 1.下载/解压 在hive官网上选择要下载的版本,我选择的版本是hive-0.10.0. 下载好解压 ...

  8. opencv求取RGB分量

    需要注意的是下面r,b,g的类型和顺序 须用IPL_DEPTH_8U类型创建图像且[0][1][2]分量分别是b,g,r. 另外多谢郑乾师兄帮我发现了IPL_DEPTH_8U问题 uchar r,b, ...

  9. cololection

    package cn.bjsxt.col; /** * 简化迭代器原理 * hasNext * next * @author Administrator * */ public class MyArr ...

  10. [HDOJ2795]Billboard(线段树,单点更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题意:w*h的公告板要贴公告,公告是w*1的,每个公告有先后顺序,要使每个公告贴的位置尽可能地高 ...