-
指针和引用的区别
性质方面
1.指针是一个实体,需要分配内存空间;引用只是变量的别名,不需要分配空间。
void main(){
int a = 1;
int *p = &a;
int &b = a;
cout << p << endl;
cout << *p << endl;
cout << &b << endl;
cout << b << endl;
}
//结果是:地址/1/地址/1
2.引用在定义的时候必须要初始化,并且不能改变。指针在定义的时候不一定要初始化,并且指向空间可变。(引用的值不能为NULL)
3.有多级指针,但是没有多级引用。只能有一级引用。
4.指针和引用的自增运算结果不一样。(指针是指向下一个空间,引用是引用的变量值加1)
void main(){
int a[2] = {123,256};
int *p = a;
int &b = a[0];
b++;
cout << a[0]<< endl;
cout << a[1]<< endl;
cout << *p << endl;
cout << b << endl;
//124,256,124,124
p++;
cout << a[0] << endl;
cout << a[1] << endl;
cout << *p << endl;
cout << b << endl;
//124,256,256,124
}
- “sizeof引用”得到的是所指向的变量(对象)的大小,而“sizeof指针”得到的是指针本身的大小
int a; //sizeof(a),就是求变量a所占内存,值为4;
int &b=a; // sizeof(b)==sizeof(a)
int *p = &a;// sizeof(p),指针p所占的内存,指针变量在32/64位系统下都是4个字节
//sizeof(*p) 指针p指向变量所占的内存,也就是sizeof(a)
6.如果返回动态内存分配的对象或内存,必须使用指针,引用可能引起内存泄露。
指针和引用作为函数参数进行传递时的区别
- 函数参数中的引用传递可以改变参数的值,值传递不会改变值
void main(){
double x= 3.0;
cout<<cube(x);
cout<<"= cube of " << x<<endl;
cout<<refcube(x);
cout<<"= cube of "<< x << endl;
}
double cube(double a){
a*=a*a;
return a;
}
double recube(double &ra){
ra*=ra*ra;
return ra;
}
// 27 = cube of 3
// 27 = cube of 27
refcube()函数修改了main中的x值
网友评论