int指针初始化_C++:变量,指针,引用const,extern,using,typedef,decltype关键字

a07e97035279d7259d9e212367d8b545.png

算数类型

基本类型就是int,double, long long,这一系列东西。

其中有个特殊的类型是wchar,这个符号代表本机上支持的最大的扩展字符级的字符。

(有的机器上有些扩展字符级比较大,所以需要更长的扩展字符来处理)

一般情况下,浮点数就用double就好了。

每一种字符还被分为了char和signed char,unsigned char等几种,其中signed会比unsigned少一位表示区间,一般来说是-1和0,然后向两侧蔓延。

类型转化

没什么好说的,最常见的就是越界导致的数值丢失,以及不合理的类型的赋值。需要人工去解决。

字面值常量

字面值代表赋给对手一个值,比如可以给int赋给以0打头的一个值,表示八进制,也可以给0x表示十六进制。

但要注意的是十六进制最后也是要被翻译成二进制存储的,所以最大值不能超过int的限制。

同时,‘a'代表字符,"afsd"代表一个字符串,字符串的实际存储中有一位是‘0’。

变量

变量其实是一种对象。

变量可以分为初始化和赋值两个部分。这两个步骤本身就难解难分。

只需要记住,变量通常都有自己默认的赋值变量,如果在初始化的时候指定特有的值,那也是初始化,因为这个过程中不涉及变量值的擦除。

初始化的定式其实很标准,那就是,=与数值的直接组合,=与{}包裹的数值的组合,直接在变量名后加()的组合。

变量声明与定义的关系

声明和定义可以分开的,这主要是通过extern 关键字来实现的。

这是为了解决同一个变量在众多的文件里都需要使用的问题。

标识符和作用域

标识符就其实就是起的各种名字,在不同情况下,当然有不同的规范。

作用域就是花括号外的可以用花括号外的。在花括号内的无法影响到花括号外的。

复合类型

其实复合类型很简单,包括 int &p,其中p是引用,值得是绑定到目标对象上的别名,而int *p是一个真正有存储空间的对象。

无论是指针还是引用,都可以先定义,再赋值。

如何赋值指针?

如何赋值引用?

如何解使用指针?

指向指针的指针的指针,就是一个不断在int后加*号的套娃,一层一层的套。

引用绑定一次终身绑定,但指针是可以改的。

所以就有了p = &d;

当然最骚的是这个标示符 int *&r = p, 这代表了r 是一个指针的引用,可以发现,指针是一种特殊的类型,而后才是引用符号。诀窍是,从右向左读,越靠近变量的作用越明显,int* &r,先是个引用,然后是指针。

Const

这个东西,简直是让人想死。

它的实质是在一个变量初始化之后,这个东西就不可以改了。

const如果想要在一个文件中定义,在不同的文件中引用该怎么办?

很简单,只需要在const前面加上extern就可以了。

const的特殊性在于const的指针分为指针指向的目标是常量,还是指针本身是一个常量。

一般是指向常量的指针,const int *p

但指针的常量是 int * const p,还是从右往左看,最前面的范围更大。先声明const是什么,然后是int*的类型。

有一个典型的读法:p is a point to int const. 遇到就替换成point to,遇到p,就替换成p is a.然后int * const p 就是 p is a const point to int.那就是指向int的常量指针。

constexpr和常量表达式

const是指值不会改变并且在编译过程就能得到计算结果的表达式。

两个条件,首先要const这样才能在编译过程中获得,其次要是赤裸裸的值,不能是一个函数,需要在运行时才能获得结果。

constexpr变量

这个机制是人为的指定在赋值的过程中进行编译。其实和const一样。

但是constexpr是有限制的,比如自定义的类,string等都不能被定义。并且constexpr可以定义一些简单的函数表达,这和const不同。

这个东西,可能是应用在嵌入式开发的吧,以后再熟悉。

处理类型:typedef,using

1.类型是难于拼写的,类型多了就很烦。

2.代码一长,根本搞不清楚类型是什么,需要回头寻找帮助。

(我觉得这完全不是问题啊,以我目前的开发经验,没有遇到过这种情况)

只要知道两种方法,一种是typedef,一种是using 就行。

AUTO

Auto不需要知道太多

注意auto在推断的过程中,有可能是和初始值不同。

decltype类型指示符

decltype的意思是可以自动推测表达式的类型,然后用推测出来的类型去赋值一个东西。

比如 decltype(a) b =1, 这个b就是a的类型。

自定义数据结构

其实就是struct,这个没啥说头。

唯一的要求就是希望建立struct的时候,struct分开写。

编写自己的头文件 #ifdef

我们通常把string,自定义类放在一个头文件中,然后在main函数中加上.h文件中。

这个过程中,其实是一个预处理器的处理过程,这个过程竟然是在编译之前的。

当预处理器看到# include 时,就会直接用头文件对#include进行替换。

有一个特性是头文件保护符,这个保护符其实是验证头文件中的是否成功加入到了代码中。

这个东西,为了保证唯一性,一般是和头文件的#include一起添加的。

只要无脑添加这个东西就行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值