学习问题
引用与指针
1. 引用数组: Int a[10]={0}; int (&cp)[10]=a;//此句代表cp是数组a的别名,是同一块内存空间(a当右值运算时,可以是数组首元素的地址,在引用时,代表整个数组空间)//Int&cp[10] , 无二级引用
2. 返回临时变量(内置类型)存在内部寄存器中(EAX),自定义类型存在内存中。
3. 临时变量不可进行自增;除非为返回引用。
4. 返回的引用要求: 变量为全局变量; 变量为静态变量; 该变量是以引用进,以引用出;
5. 自定义函数分配在同一块栈帧空间;
6. 引用返回的是变量的地址,存在内部寄存器中,然后通过地址找到该变量的位置;
7. Int&a=======int * const a;
8 .引用二维数组和一维数组
void fun1(int br[10])//error C2664: 'fun1' : cannot convert parameter 1 from 'int [5][10]' to 'int []' { cout<<sizeof(br)<<endl; }
void fun2(int **br)// error C2664: 'fun2' : cannot convert parameter 1 from 'int [5][10]' to 'int ** ' { cout<<sizeof(br)<<endl; }
void fun3(int (*br)[10]) { cout<<sizeof(br)<<endl; } void fun4(int br[][10])//退化为数组指针等同于int (*br)[10] { cout<<sizeof(br)<<endl; } void fun5(int (&br)[5][10])//必须明确引用对象的大小 { cout<<sizeof(br)<<endl; } void fun6(double&br)//引用变量 { cout<<sizeof(br)<<endl; } void fun7(int (&br])//引用一维数组 { cout<<sizeof(br)<<endl; }
9. 内置类型: const int a=10; const int &b=a;(编译器处理成Int temp =a; const int &b=temp) ,相反,自定义类型 const test t(10); const test &y=t(y是t的别名,中间没有创建临时对象,test &u=t(错误)
10. const & a=12.23(无类型的引用默认为整型int)
11. 拷贝构造函数的参数必须为对象的引用(即 point(const point &p) ) 若把一个真实的对象作为参数传递引起无穷递归。
12. 类的普通成员不可初始化,静态成员在类外必须初始化,因为它不属于某个对象。
13. 函数编译,先创建全局变量及对象,在创建主函数对象。
14. namespace XXXX{}自定义命名空间,默认为std空间。访某个空间,或者某个对象加作用域分辨符:: 访问全局变量(::max)
15. struct StrNode
{
int ref;
int len;
char data[];//柔性数组
}; sizeof(StrNode)=sizeof(int)+sizeof(int)