1、引用和指针的区别:
       引用是别名。必须和具体的对象绑定,在声明的时候初始化,以后不能改变绑定关系;引用不能声明为null类型;
        指针是一种变量,它的值为地址,在使用的时候可以改变,也可以赋为null;使用之前必须进行合法性判别。
2、从现有对象生产新的对象时,使用拷贝构造函数。如Class x1,x2=x1;此时x2从现存的x1生成,采用拷贝构造函数。还有就是在传递和返回对象时,使用拷贝构造函数。
      函数在返回或传递简单类型变量时,一般采用按值传递,但对于对象或者结构等比较复杂的参数时,编译器调用对象的拷贝构造函数。没有自定义的则编译器使用默认的拷贝构造函数。强制不使用拷贝构造函数传值,则必须将其声明为private。
3、函数调用框架: 
 函数参数
 返回地址
 局部变量
      调用函数时,编译器首先将参数压栈;然后调用函数,此时必须先将函数返回地址压栈;在函数内部,将函数的局部变量压栈;执行代码;将返回值压栈。
      编译器可以根据距离返回地址的偏移值访问返回值和局部变量。返回地址保存在EBP寄存器(基址)中。
       对象等数据结构比较复杂,直接在堆栈中返回会产生“重入”问题,最佳的方法是将返回值的地址压栈,函数直接将返回值信息拷贝到目的地。
4、Class X;
      X   f(X  param)
     {return param};//这种情况下要调用两次拷贝构造函数。
     首先,将param对象作为参数传递时,要按值传递,调用拷贝构造函数。
     然后,将param 对象作为返回值传递时,调用拷贝构造函数,按值返回对象
    【临时对象】,执行语句f();时,f的返回值会先产生一个临时对象,保存在内存某一个地址中,而且临时对象是常量,试图改变它的行为是非法的。如,将其作为左值赋值的行为是错误的。
5、函数指针判定:按照“右左右……”的判断顺序进行判定。比如
     float (*(*fp2)(int))[10];
    从中间的fp2开始,
    向右“)”,返回;
    向左“*”,fp2是一个指针;
    向右“(int)”,函数参数列表,fp2是一个函数指针,返回什么?
    向左,“*”,返回值是一个指针,指向什么?
    向右,“[10]”,长度为10数组,指针指向长度为10的数组,什么类型的数组?;
    向左,“float”,数组是float类型的。
   总结 fp2是一个函数指针,参数为Int类型,返回指向float类型数组的指针。