-
指針和引用的區(qū)別
性質(zhì)方面
1.指針是一個(gè)實(shí)體,需要分配內(nèi)存空間;引用只是變量的別名,不需要分配空間。
void main(){
int a = 1;
int *p = &a;
int &b = a;
cout << p << endl;
cout << *p << endl;
cout << &b << endl;
cout << b << endl;
}
//結(jié)果是:地址/1/地址/1
2.引用在定義的時(shí)候必須要初始化,并且不能改變。指針在定義的時(shí)候不一定要初始化,并且指向空間可變。(引用的值不能為NULL)
3.有多級指針,但是沒有多級引用。只能有一級引用。
4.指針和引用的自增運(yùn)算結(jié)果不一樣。(指針是指向下一個(gè)空間,引用是引用的變量值加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所占內(nèi)存,值為4;
int &b=a; // sizeof(b)==sizeof(a)
int *p = &a;// sizeof(p),指針p所占的內(nèi)存,指針變量在32/64位系統(tǒng)下都是4個(gè)字節(jié)
//sizeof(*p) 指針p指向變量所占的內(nèi)存,也就是sizeof(a)
6.如果返回動態(tài)內(nèi)存分配的對象或內(nèi)存,必須使用指針,引用可能引起內(nèi)存泄露。
?指針和引用作為函數(shù)參數(shù)進(jìn)行傳遞時(shí)的區(qū)別
- 函數(shù)參數(shù)中的引用傳遞可以改變參數(shù)的值,值傳遞不會改變值
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()函數(shù)修改了main中的x值