对程序的结构的相关学习:
一 指向对象的指针数组
数组的元素是指针型
Point *pa[2];
由pa[0],pa[1]两个指针组成,都指向Point类型的对象。
指针常量和常量指针(指向常量的指针)
指针常量:
在指针定义语句的指针名前加const, 表示指针本身是常量。
int a; int* const p=&a; 定义时必须初始化
指针值p不可以修改,指针指向的内容可以修改。
即p是常量,不可以作为左值进行运算,*p可以修改
左值:是对应内存数据的一个表达式,左值对应的内存空间的内容允许刷新。可以出现在赋值运算符的左侧。
右值:右值指的是引用了一个存储在某个内存地址里的数据。出现在赋值运算符的右侧。
要求左值运算:++,--,+=等
二 常对象和常成员函数
常对象:数据成员值在对象的整个生存期间内不能被改变。
即常对象定义是必须进行初始化,而且不能被更改。
三 引用(reference)的概念
为一个变量、函数等对象规定一个别名,该别名称为引用。此后,对别名的操作即是对别名所代表的对象的操作。
引用必须初始化。引用一旦被声明则不能再修改.
为提高可读性,引用与变量、指针定义尽量不在同一行。 尽量避免这样的语句int a,&ra=a,*p=&a;
void &a=3;//error
void 本质不是一个类型,只是在语法上相当于一个类型,没有该类型的对象。
形参和实参结合规则:
形参为引用时,凡遇到形参(引用)的地方,全部用实参(对象)来代替。
参数结合符合初始化标准
传递引用给函数与传递指针的效果相同。
可读性比指针传递好(与传值方式的调用可读性相同,性能却强于传值方式)
可使用引用传递从函数返回多个值(指针和引用都可以)
四 引用和指针的关系
指针是个变量,可再赋值; 而引用建立时必须进行初始化并且决不会再关联其它不同的变量。
指针操纵两个实体(指针值、指向的值);引用只能操纵一个实体。
引用在内部用指针实现 ,被看成是指针常量,不能操作自身的地址值,只能访问所指向的实体。
在语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的,只不过编译器帮我们完成了转换.
实际上“引用”可以做的任何事情“指针”也都能够做,为什么还要“引用”?
答案是“用适当的工具做恰如其分的工作”。
指针能够毫无约束地操作内存中的东西,尽管指针功能强大,但是非常危险。 引用是指针出于安全考虑的替代品。
在以下情况下你应该使用指针:
一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空) 二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。
如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。
用const 限定引用
用const 限定引用声明方式:
int i; const int& p=i;
用这种方式声明的引用,不能通过引用对目标变量的值进行修改,保证了引用的安全性。
作为参数可以保证在函数执行时不被修改
int f(const int& cs){……}
int main(){
int s;
f(s);
//…….
}
int i;
const int * p=&i;
const int& p=i;
效率相同
引用的使用-函数调用作为左值
int a=0,b=0,c=0;
int & count(int k)
{
if(k>60) return(a);
if(k<=60&&k>30) return(b);
if(k<=30) return(c);
}
int main()
{int i,j;
for(i=0;i<15;i++)
{
cin>>j;
count(j)++;
}
cout<
网友评论