指针和引用

指针是变量,它存储的是变量的地址,它的类型为它能指向的变量的类型。引用是已定义变量的别名

指针可以不初始化(虽然不太好),而声明引用必须要初始化。

int *p;
int &r; // error reference variable "r" requires an initializer

指针初始化后,还可以指向其他相同类型的变量,而引用一经声明就和变量绑定在一起了。因此,若在函数内改变了指针的指向,则不会影响到其原先指向的变量

#include <iostream>
using namespace std;

void fun(int *a, int &b)
{
    cout << "a " << &a << "\n"; // a 0x7ffc3717c318
    int c = 10, d = 12;
    a = &c; // 改变指针a的指向
    b = d;
    *a = 15;
    cout << &b << "\n"; // 0x7fffd444c634
    b = 16;
}
int main()
{
    int na = 3, nb = 4;
    int *a = &na;
    int &b = nb;
    cout << &nb << "\n";        // 0x7fffd444c634
    cout << "a " << &a << "\n"; // a 0x7ffc3717c2e8
    fun(a, b);
    cout << na << " " << nb << "\n"; // 3 16
    return 0;
}

对指针进行sizeof,得到的是指针的大小,对引用进行sizeof得到的是变量的大小。

char ch = 'a';
char *p = &ch;
char &q = ch;
cout << sizeof(p) << " " << sizeof(q) << endl; // 8 1

说明:由于指针存放的是地址,因此其大小与系统有关,64位系统,其大小为8,32为系统其大小为4,以此类推。

c++
64 views
Comments
登录后评论
Sign In