【C++ 重要知识点总结】数据类型

文章介绍了C++中的基本类型,如整型、浮点型、引用和指针,以及字面值常量的使用,包括不同进制的整数和浮点数,字符串和字符。还讨论了变量的声明、定义、初始化,以及作用域的概念,区分了左值和右值表达式。

类型

类是一种类型,是对象的模板,而不是变量或对象。它内部本身不包含对象。只是声明了这种对象的存在。只有创建对象的时候,才会真正的创建对象内部的对象。

1 类型

  • 简单类型
    • 整型 int、short、long、longlong、bool、char、size_t
    • 浮点型 float、double、long double
  • 复合类型
    • 引用&a
    • 指针*pointer
    • 数组 a[]
    • 字符串"hello world"
  • 自定义类型
    • class
    • 结构体struct
    • 枚举enum
    • 联合体union

关于size_t的说明:size_t是标准C库中定义的,在64位系统中为long long unsigned int,非64位系统中为long unsigned int。使用size_t可能会提高代码的可移植性、有效性或者可读性,或许同时提高这三者。因为其是基于平台变化的最大支持的无符号整型。

2 字面值常量

常量主要包括字面值常量和自定义常量。

整型字面常量

  • 不同进制指的是字面格式,其转化为存储格式时,都会变成二进制存储。不必担心十进制与二进制之间的运算。字面常量只是一种数字的表示方法。24,,024,,0x24。会自动选用尺寸最小的整型进行存储;负号是对字面值取相反数,不是字面值的一部分。
85         // 十进制
0213       // 八进制 
0x4b       // 十六进制 
30         // 整数 
30u        // 无符号整数 
30l        // 长整数 
30ul       // 无符号长整数

浮点型字面值常量

  • 默认情况下使用 double 存储。3.14,3.14E0,10e4
3.14159       // 合法的 
314159E-5L    // 合法的 
510E          // 非法的:不完整的指数
210f          // 非法的:没有小数或指数
.e55          // 非法的:缺少整数或分数

字符和字符串的字面常量

  • ‘a’"adbd"字符串的字面值是由字符数组构成的。编译器会在每个字符串常量的末尾添加一个’\0’

转义序列

\n\t\a\v\\\b\"\?\'\r\f  
\7\0\12\115

可以指定字面值常量的类型。字面值会有默认的常量类型。

  • 常见前缀 u(Unicode 16)U(unicode32) L(宽字符) u8(utf-8)
  • 常见后缀 u/U(unsigned),l/L(long),ll/LL(longlong),f/F(float)

bool字面值常量

false,true

指针字面值常量

NULL//C中是NULL
nullptr//C++中是nullptr

自定义常量

这些常量都不是字面值常量,而是用户自定义的常量。在 C++ 中,有两种简单的定义常量的方式:

  • 使用 #define 预处理器。编译器常量,编译期间使用常量代替原来的值。
  • 使用 const 关键字。运行时常量,运行时值不可修改。

3 变量

关于 C++中常见的描述总结:对象 object,存储数据并具有某种类型的内存空间。已经命名的对象叫变量。变量和对象通常通用。值表示只读的数据。变量和对象是可变的数据。

变量的声明(extern)

  • 分离式编译机制:声明和定义可以分离。声明使得程序可以被程序所知道,定义负责创建与名字关联的实体(变量空间)。多个文件可以独立编译。声明并没有申请对象空间(变量空间)。
  • extern 可以声明,而不进行定义。变量可以被声明很多次,但只能被定义一次。不能再函数体中对 extern 声明的变量进行修改,extern 声明的变量只能是外部变量。
  • 函数不需要使用extern即可实现声明和定义分离。
  • 多次声明必须兼容,类型一致。
extern int i;//声明,但没有申请对象空间。
int j;//声明并定义了,申请了兑现该控件

变量的定义和初始化

变量定义的时候,编译器会分配内存空间。并执行初始化函数。

  • 默认初始化:变量没有被显示初始化。
  • 值初始化:()
  • 直接初始化:使用(val)进行初始化。
  • 拷贝初始化:使用=进行初始化
  • 列表初始化:使用{}进行初始化。
int d;//默认初始化
int d();//值初始化
int d(1);//直接初始化
int d = 1;//复制初始化
int e = {2};//复制初始化
int f{3};//花括号列表初始化

初始化相关的内容参考初始化的方法

初始化和赋值是两个不同点操作。使用等号能够表示赋值,也能够实现初始化。

C++是静态类型语言。在编译阶段,进行类型检查。

4 标识符与关键字。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wZW3mSZz-1688957645893)(image/2021-03-03-17-45-17.png)]

5 作用域

作用域定义

  • 全局作用域:名字在所有花括号之外。
  • 块作用域:名字在其他作用域内。
    • 函数体作用域
    • 类作用域
    • 普通块作用域

作用域作用

  • 内层作用域,外层作用域。
  • 控制名称的可见性,防止出现明明冲突。
  • 在进行符号查找的时候先查找内部作用域,再查找外层作用域。直到发现符号。

6 C++中有两种类型的表达式

  • 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。

  • 右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

  • 变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

onnx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值