C++ Primer Plus 第四章 类型

C++类型

    #inlucde<iostream>
    using namespace std;
    int main(){
        cout << "Hello World";
        return 0;
    }

复合类型


string类操作

  1. s1+s2 string类的合并,类似于数组字符串的strcpy()函数。
  2. s1+=s2 string加,类似于数组字符串的strcat()函数。

使用string读取字符串

  1. 读取一个单词时
    cin >> str1;
  2. 读取一行时
    getline(cin,str1);

原始字符串,字符串中没有转义字符。
结构为
R"(—)" or R"+(—)+",其中+*可以是其他任意数量的字符(斜杠除外)

共用体union


用法:

    union one4all{
        int int_val;
        long long_val;
        double double_val;
    };

可以将共用体匿名放置在结构体中:

    struct widget{
        char brand[20];
        int type; //用来标记共用体成员使用情况
        union{
            long id_num;
            char in_char[20];
        };
    };

    widget prize;
    //调用:
    prize.id_num;
    prize.id_char;

enum枚举


例:

    enum spectrum{red,orange,yellow,green,bule,violet,indigo,utraviolet};
  1. 让spectrum成为新类型的名称;spectrum被称为枚举(enumeration)。
  2. 将red,orange,yellow等作为符号常量,他们对应整数值0~7。这些常量叫做枚举量
    (enumerator)。

可以使用刚才的枚举名声明变量,变量只能取枚举量。枚举没有定义算数运算。枚举量
是整形,可以被提升为int类型,但是int类型不能自动转换为枚举类型。但是可以通过强制转换
使int变成枚举类型。

可以使用赋值运算符来显式地设置枚举量的值:

    enum bits{one = 1,two = 2,four = 4,eight = 8};

其中指定的值必须是整数。可以创建多个值相同的枚举量。

指针和自由存储空间


&地址运算符

使用地址运算符&可以获取一个变量的地址。

*间接值(indirect value) or 解除引用(dereferencing)运算符

将其应用与指针,可以得到该地址处存储的值。

声明

    int*p;

new分配内存


    int *pn = new int;

数据对象:指为数据项分配的内存块。
变量也是数据对象,但是指针指向的内存不一定是变量。

delete释放内存


如果不释放内存,一直new新的内存地址,程序可能会因为内存不够用而终止。

    int *pn = new int;
    delete pn;
  • delete只能释放使用new分配的内存,不能释放通过变量分配的内存
  • 对于空指针,使用delete是安全的
  • 对于同一块内存,不能连续使用两次delete,结果是未知的

使用new创建动态数组


    int *pn = int [10];
    delete [] pn;

两者必须都加上方括号,方可建立和释放动态数组。

    int *p[3];
    int(*q)[3];
    p[0] = new int[3];
    q = new int[1][3];

[]的优先级比*高,[]先与p结合,代表包含三个指针的数组

反之则是指向包含三个元素数组的指针

    short tell[10];
    cout << tell << endl;
    cout << &tell << endl;

运行结果相同,但是前者代表的是2字节的地址,后者代表的是20字节的地址。

前者类型是 short* ,后者是 short *[10].

指针和字符串


自动存储


局部变量

静态存储


全局变量

    static int static_A;

动态存储


new获取的内存空间

忘记delete内存,会造成内存泄漏,严重可能引起程序崩溃。

auto

    const int *q[3];
    auto p = q; // type(p) = const int *[3]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值