C++Primer 读书笔记——第二章:变量和基本类型(一)

前言

C++Primer 读书笔记,一个小白的自留地,欢迎大佬批评指正~


2.1 基本内置类型

2.1.1 算术类型

整型和浮点型 带符号类型和无符号类型

如何选择类型

 2.1.2 类型转换

bool b = 42;   //b为真
int i = b;     //i的值为1
i = 3.14;      //i的值为3
double pi = i; //pi的值为3.0
unsigned char c = -1;  //假设char占8比特,c的值为255   -1+256,最小正数
signed char c2 = 256;  //假设char占8比特,c2的值是未定义的


int i = 42;  
if(i)          //if条件的值将为true
    i = 0;
#include <iostream>

int main()
{
    bool b = 42;
    std::cout << "b = " << b << std::endl;

    int i = b;
    std::cout << "i = " << i << std::endl;

    i = 3.14;
    std::cout << "i = " << i << std::endl;

    double pi = i;
    std::cout << "pi = " << pi << std::endl;

    unsigned char c = -1;
    std::cout << "c = " << c << std::endl;

    signed char c2 = 256;
    std::cout << "c2 = " << c2 << std::endl;
    return 0;
}

含有无符号类型的表达式

#include <iostream>

int main()
{
    unsigned u = 10;
    int i = -42;

    std::cout << i + i << std::endl;
    std::cout << u + i << std::endl;   //2^32-42+10 = 4294967264

    unsigned u1 = 42, u2 = 10;
    std::cout << u1 - u2 << std::endl; 
    std::cout << u2 - u1 << std::endl; 

    return 0;
}

 2.1.3 字面值常量

 转义序列

指定字面值的类型

 2.2 变量2.2.1 变量定义

 默认初始化

2.2.2 变量声明和定义的关系

2.2.3 标识符

 2.2.4 名字的作用域

嵌套的作用域

2.3 复合类型

 2.3.1 引用

引用本身不是对象,所以不能定义引用的引用

 2.3.2 指针 获取对象的地址

 访问无效指针的后果无法预计,因此程序员必须清楚任意给定的指针是否有效。

利用指针访问对象

 空指针:

 建议初始化所有指针

 赋值和指针

 void*指针

定义多个变量

指向指针的指针

#include <iostream>

int main()
{
    int ival = 1024;
    int* pi = &ival;
    int** ppi = &pi;

    std::cout << ival << std::endl;
    std::cout << &ival << std::endl;
    std::cout << pi << std::endl;
    std::cout << &pi << std::endl;
    std::cout << *pi << std::endl;
    std::cout << "---------------------" << std::endl;
    std::cout << ppi << std::endl;
    std::cout << &ppi << std::endl;
    std::cout << *ppi << std::endl;
    std::cout << **ppi << std::endl;
    return 0;
}
1024
00000093F737F9B4
00000093F737F9B4
00000093F737F9D8
1024
---------------------
00000093F737F9D8
00000093F737F9F8
00000093F737F9B4
1024

 指向(绑定)指针的引用

#include <iostream>

int main()
{
    int i = 42;
    int *p = nullptr;
    int *&r = p;  //r是引用

    std::cout << i << std::endl;
    std::cout << &i << std::endl;
    std::cout << p << std::endl;
    std::cout << &p << std::endl;
    std::cout << r << std::endl;   //p是什么,r就是什么
    std::cout << &r << std::endl;  //&r和&p也是一样的

    r = &i;
    *r = 24;
    std::cout << i << std::endl;
    std::cout << &i << std::endl;
    std::cout << p << std::endl;
    std::cout << &p << std::endl;
    std::cout << r << std::endl;
    std::cout << &r << std::endl;

    return 0;
}
42
00000034D850F564
0000000000000000
00000034D850F588
0000000000000000
00000034D850F588
24
00000034D850F564
00000034D850F564
00000034D850F588
00000034D850F564
00000034D850F588

总结

如何选择类型?无符号类型

类型转换

避免无法预知和依赖于实现环境的行为

左值引用

引用要初始化,而且还得是对象,指针可以不用,但建议初始化指针

void*指针

指向(绑定)指针的引用:从右向左读

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值