C++ Primer Plus Note Chapter4 结构、枚举、共用体、指针

C++ Primer Plus 学习笔记

第四章 下半

结构

结构的描述

struct structName
{
    memberType memberName1;
    memberType memberName2;
}

结构的声明及初始化

structName variableName;    // C++特有
struct structName variableName; // C支持

// 结构初始化
structName variableName = 
{
    memberValue1,
    memberValue2
};

// C++11允许
structName variableName {memberValue1, memberValue2};
structName variableName {}; // 所有成员被设置为零

结构体的初始化同样不允许缩窄转换,也可以将string类作为成员。
可以使用=将结构体的值赋给另一个同结构的结构体变量。结构体同样可以作为数组

结构体成员的访问

structName.variabelName
共用体

使用关键字union作为共用体的标识,其描述结构、声明、初始化以及成员的访问的语法均和结构体类似。

共用体与结构体的不同之处在于,共用体只能同时储存一个成员。因此,共用体的长度是它的最大成员的长度。

所以,共用体可以一会儿是int型,一会儿是double型。

枚举

使用关键字enum作为枚举的表示,使用方式和结构体类似,如下

enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet};

其中,red等作为枚举量,对应的数值为0~7,作为一种符号常量存在。可以将其作为一个常量,赋给一个变量,但不允许进行运算。
可以在定义时,特别地指定枚举量的值,如enum spectrum {red = 3, yellow};。值得注意的是没有初始化的枚举量的值将比前面的大1。同时,也可以创建多个值相同的枚举量。
也可以对一些整型进行强制转换,只要他的值在枚举的范围内。

指针

C++中的指针表示和C语言一样,同样使用&作为地址运算符,*作为解引用运算符。

其初始化格式为,如下

int *p1, *p2;   // 两个指向int的指针
int *p1, p2;    // 一个指向int的指针(p1)和一个int变量(p2)
int *pt = &higgens; // 将pt的值设置为higgens的地址

在对一个指针使用接引用*之前,必须确保该指针指向一个明确的地址。

指针和数组的关系

*(pt + 1) = pt[2]
pt = &pt[0]

使用指针访问结构成员时,需要使用->而不是.

分配内存

C++可以使用new运算符来分配内存。通用的格式为typeName * pointer_name = new typeName;

可以使用delete运算符来释放new所分配的内存,格式为delete pointer_name;。**

创建和释放动态数组

short * ps = new short [500];
delete [] ps;

new和delete必须配套使用,应注意:

  1. 不要使用delete来释放不是new分配的内存。
  2. 不要使用delete释放同一个内存块两次。
  3. 如果使用new[]为数组分配内存,则应使用delete[]来释放。
  4. 如果使用new为一个实体分配内存,则应使用delete(没有方括号)来释放。
  5. 对空指针使用delete安全的。
数组的替代品

模板类vector是一种动态数组,使用它必须包含头文件vector,同时它也在名称空间std中。

C++11添加了模板类array来替代定长数组,使用它必须包含头文件array,同时它也在名称空间std中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

弄曲幽篁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值