欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > C++知识点总结全系列 (01):数据类型、数据类型转换和变量

C++知识点总结全系列 (01):数据类型、数据类型转换和变量

2025/11/12 20:40:39 来源:https://blog.csdn.net/qq_42279379/article/details/139983975  浏览:    关键词:C++知识点总结全系列 (01):数据类型、数据类型转换和变量

目录

  • 1、基本内置类型
    • (1)算术类型
      • A.整型
      • B.浮点型
    • (2)字面值常量
      • A.整型字面值
      • B.字符字面值
      • C.指定字面值类型
    • (3)常量
      • A.What(什么是常量)
      • B.Why(常量有什么用)
      • C.常量表达式和constexpr
  • 2、复合数据类型
    • (1)指针
      • A.What(什么是指针)
      • B.Which(有哪些指针)
    • (2)引用
      • A.What(什么是引用)
      • B.How(如何使用)
    • (3)指针和引用的关系
      • A.对立性
      • B.统一性
  • 3、枚举类型
    • (1)What(什么是枚举)
    • (2)Which & How(枚举种类和使用)
      • A.限定性枚举类型
      • B.非限定性枚举类型
    • (3)Why(枚举类型的作用)
  • 4、自定义数据类型
    • (1)类
      • A.面向对象的四大特征
      • B.What(什么是类)
      • C.Why(类的作用)
    • (2)结构体
  • 5、处理类型
    • (1)类型别名
    • (2)auto
    • (3)decltype
  • 6、数据类型转换
    • (1)显式转换
      • A.一般形式的显式转换:
      • B.static_cast:
      • C.dynamic_cast:
      • D.const_cast:
      • E.reinterpret_cast:
    • (2)隐式转换
      • A.一般隐式转换:
      • B.数组转指针:
    • (3)算术转换
      • A.What(什么是算术转换)
      • B.整型提升
  • 7、变量
    • (1)变量的声明
    • (2)变量的定义
    • (3)变量的类型
      • A.全局变量
      • B.局部变量

1、基本内置类型

(1)算术类型

bool,char(1Byte),wchar_t(2Byte),char16_t(2Byte),char32_t(8Byte)

short(2Byte),int(2Byte | 4Byte),long(4Byte),long long(8Byte)

float(4Byte,6位有效数字),double(8Byte,10位有效数字)

A.整型

bool、char、short、int、long、long long、unsigned *

B.浮点型

float、double、unsigned *

(2)字面值常量

A.整型字面值

八进制:024; 十进制:20; 十六进制:0x14

B.字符字面值

  • 单字符字面值:

‘a’、’A’、’0‘

  • 转义字符字面值:

\n、\t\v(制表符)、\'(单引号)、\"(双引号)、\a(响铃)、\b(退格符)、\?(问号)、\r(回车符)

  • 布尔字面值:

false、true

  • 指针字面值:

nullptr

C.指定字面值类型

前缀指定:

u’w’--------------------------char16_t
U’w’-------------------------char32_t
L‘w’--------------------------wchar_t
u8‘w’------------------------char

后缀指定:

120u or 120U-------------usigned
1978l or 1978L-----------long
128100000000-----------long long

128.1f----------------------float
128.1F---------------------float
1998.12L------------------long double
1998.12l------------------long double

(3)常量

A.What(什么是常量)

被const修饰关键字修饰的变量。既然是常量,那么在创建的时候就必须被初始化。
涉及到指针常量时,需区分顶层指针和底层指针
**顶层指针:**指针本身就是一个常量

int a=10;
int const *ptr = &a;

**底层指针:**指针所指向的是一个常量

const a = 10;
const int *ptr = &a;

B.Why(常量有什么用)

安全性:保护特定数据不被修改
可读性:提高代码的可读性
可维护性:便于修改字面常量的值

C.常量表达式和constexpr

What(常量表达式)

在编译过程中就得到了计算结果的表达式,且其值不会改变

如:

const int maxValue = 300; //maxValue是常量表达式
const int limit = maxValue + 20; //limit也是一个常量表达式

constexpr关键字

用constexpr关键字声明的变量,一定是一个常量

const int *p = nullptr; //p是一个指向整型常量的指针(指针本身不是常量)
consntexpr int *q = nullptr; //q本身是一个常量

2、复合数据类型

(1)指针

A.What(什么是指针)

用于存放对象地址的复合数据类型

B.Which(有哪些指针)

空指针:

 int *p = nullptr;  int *p = 0;(不指向任何对象)

void *:

void *double dAngle = -180.0;  void * p = &dAngle;(万能指针,可指向任意类型的指针)

底层指针:

const int a=10;
const int *p = &a; //指针指向的是一个常量

顶层指针:

int a = 10;
int const *p=&a; //指针本身就是一个常量类型的指针,不能被重新赋地址

(2)引用

A.What(什么是引用)

引用是变量的别名,在定义的时候就一定要被初始化。

B.How(如何使用)

int a = 10;
int &ra = a;

(3)指针和引用的关系

核心思想:指针是一个对象,而引用不是对象

A.对立性

初始化:指针可以不进行初始化;引用一定要进行初始化
重新赋值:指针可以被重新赋值;引用被初始化后不允许被重新赋值

B.统一性

两者都是对其它对象的间接访问

3、枚举类型

(1)What(什么是枚举)

本质:一组整型字面值常量

(2)Which & How(枚举种类和使用)

A.限定性枚举类型

What:

必须显式地使用作用域解析符(::)访问枚举值

How:

enum class EnumName{enum01,enum02,...}; //默认值从0开始递增

注意:限定性枚举类型禁止隐式转换,只能显式强制转换

EnumName eName = EnumName::enum01;
int iName = (int)eName;

B.非限定性枚举类型

What:

非限定性枚举值在相同作用域共享命名空间,无需作用域解析符就能访问

How:

enum WeekDay = {Monday = 1, TuesDay = 3, Wednesday, Thursday, Friday};
WeekDay wDay = Monday; //可直接访问枚举值
std::cout<<wDay<<std::endl; //打印:1
wDay = Friday;
std::cout<<wDay<<std::endl; //打印:6

(3)Why(枚举类型的作用)

用于限定可取值的范围,增加代码的可读性和可维护性

4、自定义数据类型

(1)类

A.面向对象的四大特征

谈到类,就必须讲一下面向对象,而面向对象的四大特征我们必须掌握

抽象:将现实世界中复杂的问题简化为可管理的模块或类
封装:保护对象状态不被外部直接修改,提高程序的安全性和鲁棒性
继承:提高代码的可重用性,有利于程序的维护
多态:同一方法或操作符在不同对象执行时可产生不同的行为,多态是设计模式的基础

B.What(什么是类)

一种封装了数据变量函数的自定义数据结构

C.Why(类的作用)

  • 鲁棒性和安全性:封装数据和方法,隐藏内部实现细节,暴露必要的接口给外部
  • 抽象和建模:用于解决现实世界中的问题
  • 重用性:继承允许代码重用

(2)结构体

结构体struct和类的唯一区别:成员默认的访问权限不同,类的默认权限是private,而struct的默认权限是public

5、处理类型

(1)类型别名

typedef:

typedef unsigned Year;
Year yearNow = 2024; //Year就是double的别名

using:

using Year = int;
Year yearNow = 2024;

(2)auto

让编译器替我们分析表达式的数据类型

std::vector<int> vYear{1949, 1976, 1978, 1998, 2001, 2008, 2015, 2020, 2024, 2026};
for(auto &year: vYear)
{std::cout<<year<<std::endl;
}

(3)decltype

根据已知的变量推断类型

const int year = 1978;
decltype(year) yNow = 2024;

6、数据类型转换

(1)显式转换

A.一般形式的显式转换:

int(dDeficit) 或者 (int)dDeficit;

double dDeficit = 128.1;
int iDeficit = (int)dDeficit; //或者 int iDeficit = int(dDeficit);

B.static_cast:

static_cast只要不包含底层的const,都可以使用,即不能去掉底层const的常量属性,也不能将常规指针转换为底层指针(const double *pd)

double dDeficit = 128.1;
void *p = &dDeficit;
double *pd = static_cast<double*>(p);

C.dynamic_cast:

当进行向下转型(父类对象转为子类对象)时,如果基类指针或引用指向派生类对象,则转换成功。否则转换失败,返回的是空指针。

Base *basePtr = new Derived();
Derived *derivePtr = dynamic_cast<Derived*>(basePtr);
if(derivePtr==nullptr) std::cerr<<"转换失败"<<std::endl;
else std::cout<<"转换成功"<<std::endl;

D.const_cast:

改变底层const,将常量对象转换为非常量对象,static_cast无法实现const_cast的功能

  • 去掉底层const的const:
const char * pc;
char *p = const_cast<char*>(pc);
  • 为常规指针添加const属性:
char *p;
const *pc = const_cast<const char*>(p);

E.reinterpret_cast:

可以在任意指针类型引用类型之间进行转换,但不具有可移植性(不同平台可能不通用),并且不安全

double* pd = &dDeficit;
int *pi = reinterpret_cast<int*>(pd);

注意:仅适用于指针类型和引用类型

(2)隐式转换

A.一般隐式转换:

double dDeficit = 128.1;
int iDeficit = dDeficit;

B.数组转指针:

int a[10] = {0,1,2,3,4,5,6,7,8,9};
int *pa = a; //指向数组的首元素

(3)算术转换

A.What(什么是算术转换)

一种算术类型转换成另一种算术类型,都将转换成最宽的类型进行运算

B.整型提升

把小整型提升为较大的整型:
char、signedchar、usignedchar、short、unsignedshort 等会自动提升为 int/unsignedint

char a = 10;
int iYear = 1966;
int iSunLv = a + iYear; //1976

7、变量

(1)变量的声明

extern int i; //声明变量i,而非定义

(2)变量的定义

int i; //变量的定义

(3)变量的类型

A.全局变量

在整个程序中起作用,即作用域的是全局的(全局都可以访问全局变量)

B.局部变量

只在代码块中起作用,在代码块中访问全局变量(只有代码块中才能访问局部变量)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词