一、C++和C中指针的区别
C和C++指针的区别在于C++对类型的要求更强。C不允许随便把一个类型的指针赋值给另一个类型,但允许通过void*来实现。
bird* b;
rock* r;
void* v;
v=r;
b=v;
C++不允许这么做,如果想把一种类型当作别的类型处理,必须显式的使用类型转换。
二、C++中的引用
引用就像是能自动被编译器间接引用的常量型指针。任何引用必须和存储单元联系,
1.当引用被创建时,必须被初始化,
2.一个引用初始化为指向一个对象,就不能改变为另一个对象的引用
3.不可能有NULL引用,必须确保引用和一块合法的区域存储单元关联
引用常见的用处
1.作为函数的参数
和传递指针有相同的作用,都可以对函数外的参数产生改变,但引用的语法更清晰。
2.作为返回值
无论引用关联什么都应v存在,否则不知道指向哪个内存
3.使用常量引用作为参数
在函数参数中使用常量引用,可以允许函数接受临时对象,
void f(int&) {}
void g(const int&) {}
int main()
{
// f(1); //error 不能接受临时变量
g(1);
}
4.指针引用
在C中要改变指针本身函数必须这样声明
void f(int**);
要传递参数必须取指针的地址
int i=47;
int* ip=&i;
f(&ip);
使用指针的引用,语法会清晰很多。
void f(int*& i) {i++;}
int* i=0;
f(i);
//增加的是指针本身,而不是指向的值
“`
三、拷贝构造函数
在函数调用时,如果需要通过传值方式来传递和返回用户定义的类型时,需要用到拷贝构造函数。
如果定义的类没有拷贝构造函数,那么值传递会采用C中原始的位拷贝概念,不能够保证对象的完整性(如果类定义中有静态成员可能会出问题,如果类中含有指针)
拷贝构造函数X(X&)称X引用的X