C/C++ 指针和引用的区别

2018-07-19  本文已影响0人  jcyan
 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
}
  1. “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.如果返回动态内存分配的对象或内存,必须使用指针,引用可能引起内存泄露。


指针和引用作为函数参数进行传递时的区别

  1. 函数参数中的引用传递可以改变参数的值,值传递不会改变值
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值
上一篇 下一篇

猜你喜欢

热点阅读