热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c++基础整理(基本类型和变量)

c基础整理(基本类型和变量)基本内置类型c中,基本的内置类型有两种:算数类型字面值常量算数类型算数类型分为整形和浮点形两种,整形包
c++基础整理(基本类型和变量)

基本内置类型

c++中,基本的内置类型有两种:

  • 算数类型
  • 字面值常量

算数类型

算数类型分为整形浮点形两种,整形包含了大多数的类型如bool和char都是属于整形。
基本的类型有:

  • int 整形
  • long 长整型
  • long long 长整型
  • bool 布尔类型
  • char 字符
  • wchar_t 宽字符
  • char16_t Unicode字符
  • char32_t Unicode字符
  • short 短整型
  • float 单精度浮点数
  • double 双精度浮点数
  • long double 扩展精度浮点数

字面值类型

形如数字4,字符’a’的被称为字面值类型。字面值类型有各自对应的基本类型。

转义序列

字面值类型中有一类比较特殊的是转义序列,转移序列是不可打印的。

类型转换问题

将浮点型转换为整形时,会直接去掉小数部分。类型转换时原本的值如果超过转换的类型所能表示的最大长度时,程序会发生不可预测的问题。
如果是非0的值转换为bool型时都是true,如果是0则为false。

变量


初始化

c++初始化变量的方式有多种

int i=0;
int i(0);
int i{0};

上面的初始化的第三种方式称为列表初始化,列表初始化在发生数据精度丢失时会给出警告。

double i=0.1;
int n{i};

上面的编译无法通过。
初始时可以默认初始,默认初始化即给予默认的值,如果默认初始化发生在函数内,则不会初始化,如果使用不被初始化的值将会发生错误

声明和定义

声明的意思是告诉程序该变量存在,可以单独的声明变量不定义变量。

extern int i;//声明变量
int i;//声明并且定义变量

如果想要在一个文件中调用另一个文件中的变量,则需要在调用的那个文件中声明要调用的变量,在原本的文件包含的头文件中也要声明该变量。

标识符

c++内置了一些标识符,定义变量的时候不能和标识符同名。

变量作用域

变量定义的时候拥有其作用域,比如在一个函数中时,其作用域就是这个函数内。
变量的的作用域可以进行嵌套,嵌套时存在外层作用域内层作用域

int i=0;//外层作用域的i
int main(){int i&#61;1;//内层作用域的istd::cout<}

在内层作用域中&#xff0c;会先寻找最近作用域中变量。可以使用::来访问外层作用域的变量。

复合类型

复合类型时建立在基础类型之上的类型。

指针

指针是一种灵活且强大的数据类型&#xff0c;它允许直接对系统的内存进行操作&#xff0c;正因为可以直接对内存可以操作&#xff0c;所以乱用指针会造成巨大的隐患以及严重时使得系统崩溃。

指针的定义

int i&#61;0;
int *p&#61;nullptr;//空指针
int *m&#61;&i;//将m指向i

在定义指针时可以让其指向空指针NULL&#xff0c;NULL是C语言中定义的&#xff0c;在c&#43;&#43;中还提供了另一种空指针nullptr。nullptr是一种特殊的字面值常量&#xff0c;常常为0;
在初始化指针时可以使用&来获取变量的地址赋值给指针。
对于指针&#xff0c;指向的是变量&#xff0c;指针自己本身表示的是所指的变量的地址。可以通过解引用来访问所指向的地址。

int i&#61;0;
int *m&#61;&i;
*m&#61;1;//对指针解引用 i的值变为1

引用

引用相当于变量的别名&#xff0c;可以通过引用来修改变量。

引用的定义

int i&#61;0;
int &m&#61;i;//对i进行引用

引用有点类似于指针&#xff0c;但是却又不同于指针。指针是存储地址&#xff0c;通过地址来访问所指向的变量。引用则是变量的别名&#xff0c;直接可以访问变量来修改变量。

  • 引用在定义时必须要指明所引用的变量。

const类型修饰符

const用于修饰那些不会改变的变量。试图对const修饰过的变量进行修改时编译器会报错。

const和引用

const引用会使得不能通过当前的别名修改变量&#xff0c;const引用可以引用非const变量。

const int n&#61;0;
const int &q&#61;n;
int i&#61;0;
const int &m&#61;i;

const引用可以绑定非本类型的变量&#xff0c;在绑定时编译器会隐式声明一个和引用类型一样的临时两来使绑定正常。

double i&#61;1.1;
const int &m&#61;i;

上面段代码会转换成&#xff1a;

double i&#61;1.1;
const int temp&#61;i;//临时两temp
const int &m&#61;temp;

const和指针

指针本身表示了变量地址&#xff0c;也能表示所指向的变量&#xff0c;所以指针的const有两层含义&#xff0c;第一层含义是指针本身不可变&#xff0c;另一层是所指向的变量不可变。

int i&#61;0;
const int *p&#61;&i;//所指向的变量的值不能改变&#xff0c;即不能通过指针更改变量
int * const cp&#61;&i;//指针本身是const&#xff0c;不能改变指针本身的指向
const int *const ccp&#61;&i;//不能更改指向且不能更改所指向的变量的值

const指针也可以指向非常量的变量&#xff0c;这一点和引用一样。

顶层const和底层const

对于指针&#xff0c;存在顶层const和底层const。广泛的&#xff0c;顶层const表示本身不可变&#xff0c;底层const表示所指向的内容不可变。

const int i&#61;0;//顶层const
const int *pi&#61;&i;//底层const
int *const tpi&#61;&i;//底层const
const int *const ccp&#61;&i;//既是顶层又是底层const

有一点不同的是&#xff0c;用于引用的const都是底层const。

constexpr

c&#43;&#43;中有常量表达式的概念&#xff0c;常量表达式即在编译的过程中就可以确定固定的值&#xff0c;不同于const&#xff0c;const的值可能在运行时才会决定是多少。
常量表达式可以用constexpr来声明&#xff0c;编译器会检查是否可以在编译期间获得具体值。
指针如果要是constexpr类型&#xff0c;则必须初始化为nullptr类型。

处理类型

有时候我们不知道我们所要定义的类型时&#xff0c;可以通过一些关键字来自动获取。

auto

auto会自动的获取当前变量的类型来定义变量。
auto在推断变量类型时&#xff0c;一般会忽略掉顶层const&#xff0c;保留底层const;

const int i&#61;0;
auto in&#61;i;//in为const int
auto ip&#61;&i;//ip为const int *

decltype

decltype通过判断类型来定义变量&#xff0c;不同的一点是&#xff0c;decltype可以判断函数的返回值来定义变量

int a&#61;0,b&#61;1;
decltype(a&#43;b) i;//判断a&#43;b的类型
decltype(string::size()) strl;//size_t类型

如果对括号内的处理内容再加上一层括号的话&#xff0c;就会转成引用类型。

int a&#61;0,b&#61;1;
decltype((a&#43;b)) i&#61;&a;//i为int &类型


推荐阅读
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
author-avatar
不能深加工
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有