C++11学习笔记(3)

注:本人所有学习笔记多来自各种书籍原著,C++11学习笔记根据《C++Primer (第五版)》整理,仅供个人复习使用。

1.变量声明与定义的关系

为了支持分离式编译,C++语言将声明和定义区分开来。如果你想声明一个变量而非定义它,就在变量名前添加关键字extern

extern int i;//声明i而非定义i
int j;//声明并定义j
extern double pi = 3.1416;//定义


任何包含了显示初始化的声明即成为定义。在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。

变量能且只能被定义一次,但是可以被多次声明。声明和定义的区别看起来微不足道,实则非常重要。如果要在多个文件中使用同一个变量,就必须将声明和定义分离。此时,变量的定义必须出现在且只能出现在一个文件中,而其他用到该变量的文件必须对其进行声明,却绝不能重复定义。

2.引用

当我们使用术语引用时,指的其实是“左值引用”。

引用为对象起了另外一个名字,引用类型引用另外一种类型。引用必须被初始化。引用即别名。因为引用本身不是一个对象,所以不能定义引用的引用。

3.指针

指针与引用有很多不同。其一,指针本身就是一个对象,允许对指针的赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。其二,指针无须在定义时赋初值。和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。

指针值:指针的值(即地址)应属下列4种状态之一:

1,指向一个对象

2,空指针,意味着指针没有指向任何对象。

3,无效指针,也就是上述情况的其他值。

4,指向紧邻对象所占空间的下一个位置

空指针:得到空指针最直接的方法就是用字面值nullptr来初始化指针,这也是C++11新标准刚刚引入的一种方法。nullptr是一种特殊的字面值,它可以被转换任意其他的指针类型。把int变量直接赋给指针是错误的操作,即使int变量的值恰好等于0也不行。

建议:初始化所有指针

其他指针操作:只要指针拥有一个合法值,就能将它用在条件表达式中。和采用算术值作为条件遵循的规则类似,如果指针的值是0,条件取false。对于两个类型相同的合法指针,可以用相等操作符或不相等操作符来比较它们,比较的结果是布尔类型。如果两个指针存放的地址值相同,则它们相等;反之它们不相等。这里两个指针存放的地址值相同有三个可能:它们都为空、都指向同一个对象,或者都指向了同一个对象的下一地址。需注意的是,一个指针指向某对象,同时另一个指针指向另外对象的下一地址,此时也有可能出现这两个指针值相同的情况,即指针相等。

 

 

void指针:是一种特殊的指针类型,可用于存放任意对象的地址。一个void*指针存放着一个地址,这一点和其他指针类型相似。不同的是,我们对该地址中到底是个什么类型的对象并不了解。利用void*指针可以做的事情比较有限:拿它和其他指针比较、作为函数的输入或输出、或者赋给另外一个void*指针。注意,我们不能直接操作void*指针所指的对象。

 

指向指针的引用:

int *p;
int *&r =p;

注:面对一条比较复杂的指针或引用的声明语句时,从右向左阅读有助于弄清楚它的真实含义。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值