指针与引用的区别

本文详细探讨了C++中指针与引用的概念及其区别,包括初始化要求、在sizeof运算符中的表现、可变性、NULL值的支持、多级定义、安全性及自增操作的意义等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针:指针指向一块内存,它的内容是所指内存的地址。
引用:引用是某块内存的别名。
指针与引用的区别如下:
1、引用必须初始化,指针可以不用初始化。
编译报错如图:
这里写图片描述
2、在sizeof中含义不同,引用表示引用类型的大小,指针始终是地址所占的字节数。

int main()
{
    int c1 = 10;
    int &c2 = c1;
    int *p = &c1;

    /*char c1 = 'a';
    char &c2=c1;
    char *p=&c1;*/
    cout << "c2:" << c2 << " ";
    cout << "\n" << " ";
    cout <<"sizeof(c2):"<< sizeof(c2) << " ";
    cout << "\n" << " ";
    cout <<"sizeof(p):"<< sizeof(p) << endl;
    cout << "\n" << " ";
    cout << "c2++:" <<++c2<<" ";
    cout << "\n" << " ";
    cout << "p++:" << ++p << " ";

    system("pause");
    return 0;
}

int型运行结果:
这里写图片描述
char型运行结果:
这里写图片描述
3、指针可以指向不同的变量,但引用只能指向所引用的变量。

    char c1 = 'a';
    char c3 = 'd';
    char &c2=c1;//c2引用c1
    char *p=&c1;//p指向c1
    c2 = c3;//c2仍引用c1,但此时c1的值为d
    p = &c3;//此时p指向c3

改变引用指针指向之前打印的结果:
这里写图片描述
改变引用指针指向之后打印的结果:
这里写图片描述
4、没有NULL引用,但有NULL指针。

    int c1 = 10;
    int &c2 = NULL;
    int *p = NULL;

编译报错如图:
这里写图片描述
5、int **p,二级指针,int &&p,为幼稚引用;有多级指针,无多级引用。
6、引用比指针安全。
7、指针自增和引用自增意义不同。指针自增,指向另一块内存空间,引用自增,引用的变量加1。

int main()
{
    int c1 = 10;
    int &c2 = c1;
    int *p = &c1;
    cout << "c2:" << c2 << " ";
    cout << "\n" << " ";
    cout << "c1:" << c1<< " ";
    cout << "\n" << " ";
    cout <<"p:"<< (int)p << " ";
    cout << "\n" << " ";
    cout << "c2++:" <<++c2<<" ";
    cout << "\n" << " ";
    cout << "p++:" << (int)++p << " ";
    system("pause");
    return 0;
}

运行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值