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

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,我猜测这个引用的存储空间和指针占用的存储空间一样大。

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值