神奇的C&CPP

来源:互联网 发布:军大衣品牌 知乎 编辑:程序博客网 时间:2024/05/16 05:33

一个内存位置,保存一个值,内存位置也可以作为值,这就叫做指针。一个变量保存的要么是地址,要么是值。

* 解引用

& 取地址

指针保存的是地址,解引用得到对象的值

法则一:改变的永远是等号左侧的对象。

法则二:从右向左读。

法则三:constexpr 声明中如果有指针,那么constexpr 只对指针有效,而与对象无关。

法则四:typedef 定义的类型别名不要替换成原来的名字去理解!

法则五:在(且仅在)deltype 处,引用不是对象的同义词!

对于负责的数组声明,要由(内)向外阅读——法则六。

1.      数组指针,指向数组的指针

int(*p)[10]

指针数组,指针的数组

int *p[10]

2.      指针函数,返回类型是某一类型的指针的函数

int *f()

函数指针,指向函数的指针变量

int (*f)()

3.      指向指针的指针

int * * p

指向指针的引用

int*&r

由于引用不是真实的对象,所以不存在“指向引用的指针”,但却可以有“指向指针的引用。”

4.      顶层const:指针本身是个常量,不能改变所指的对象。

底层const:指针指向的对象是一个常量,不能改变或者通过指针改变这个对象的值。

int * constp

constint * p

== intconst * p

constint * const p

5.      别名

6.      引用可以绑定数组,指针可以指向一个数组,数组可以存放指针,但是唯独不存在引用的数组!

对于复杂的数组声明,要先从内向外读,再按照从右向左。

7.      函数模版,对一批模样相同的函数的说明描述

模板函数,将函数模板内的数据类型参数具体化后得到的重载

template<模板类型形参表>

8.      类模板,抽象

模板类,具体

template<类型参数表>

9.      static

a)       在函数体内,记忆功能,再次调用时不变

b)       在模块内,函数体外,作用范围限制在模块内,本地全局变量

c)       static函数只在源文件内有效

d)       静态数据成员是类的成员,只有一份

e)       静态数据成员存储在全局数据区

f)        静态成员变量不能在类声明中定义,初始化在类外,此时不能带有static关键字。类中只有声明,在cpp中才是初始化,初始化在main之前。

不存在名字冲突

实现信息隐藏

10.  const

a)       定义const常量

b)       避免意义模糊的数字出现

c)       保护被修饰的东西

d)       函数重载使用

e)       节省空间

f)        提高程序效率

g)       常引用

h)       修饰返回值

i)         修饰类成员函数

                       i.             返回const,const int fun()

                     ii.             不修改对象,int fun() const

11.  定义为变量分配存储空间,还可以为变量指定初始值,有且仅有一个定义

extern表声明

定义也是声明,定义包含声明

建立存储空间的声明称定义

 

0 0
原创粉丝点击