c++引用有没有存储空间?

C++ 专栏收录该内容
7 篇文章 0 订阅

c++引用有没有存储空间?

问题来自于引用与指针的区别有哪些?

答案:
1、引用定义的时候必须初始化,不能为空,也就是说必须和某对象绑定,且不能易主。但是指针可以为NULL,也可以想指谁指谁(所以他事儿多,哈哈)。
2、引用比指针更安全,引用就是一个别名,比较本分。指针就不安分了,多个指针指向同一对象,通过任何一个指针析构了对象的话,其他指针就变得非常危险(俗称野指针)。野指针得危害大大滴。

引用必须初始化,我就不初始化能咋地,也不咋地,编译不过呗,哈哈

那指针有存储空间,引用有吗?

按理说引用只是个别名呀,是不是就没给他分配空间呢,打印一下他的地址吧!

int a = 1;
int &b = a;

printf("a: %x",&a);
printf("b: %x",&b);

一样的,b的地址就是a的地址,那他应该没有存储空间吧。我不甘心!

int a = 1;

struct tag{
    int &b;
};

struct tag c = {a};

printf("%d\n",sizeof(c));

打印结果为4,这个结构体中只有一个引用,如果引用不占空间的话,这个结构体对象就应该不占内存,事实并不是这样。结果为4,正好是一个指针大小,int a也是4个字节,再来一次

double a = 1.0;

struct tag{
    double &b;
};

struct tag c = {a};

printf("%d\n",sizeof(c));

打印结果还是4,我猜测这个引用的存储空间和指针占用的存储空间一样大。

但是编译器好像不想让我们找见引用的地址,可能是为了安全吧。

  • 8
    点赞
  • 4
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值