数组名作为函数参数传递时自动退化为指针:
int Getsize(int data[])
{
return sizeof(data);//得到结果是4:一个指针的大小
}
int _main(int argc, _TCHAR * argv[])
{
int data1[]={1,2,3,4,5};
int size1=sizeof(data1);//得到20,5个int,一个占4字节
int *data2=data1;
int size2=sizeof(data2);//得到4,指针
}
复合类型:
1:引用:除了两种列外情况,引用类型必须与他绑定(引用的)的对象的类型严格匹配
例外:
第一种:初始化常量引用时允许使用任意表达式作为初始值;
允许常量引用引用字面值,非常量对象甚至表达式
第二种:对const的引用可能引用一个非const对象
常量引用仅对引用可参与的操作进行了限定,而对于引用对象本身是不是常量没有要求,因为对象可能是一个非常量,所以可以通过其他途径修改她的值;
2.指针,是一种指向另一种类型的类型
与引用不同:1,不是从一而终,生命期内可更换指向对象
2,无需定义时赋值,
相同:除了两种例外,指针类型也必须与指向对象严格匹配
例外:1。允许一个指向常量的指针指向非常量对象
和常量引用相似,指向常量的指针也没有规定指向的对象必须是一个常量;
2.存在继承关系的类是一个非常重要的例外:可以将基基类指针或引用绑定到一个派生类对象上:可以将Quato&绑定到Bulk_quota对象;也可以把一个Bulk_quota的地址付给一个Quota指针