结构体中使用引用

szn_409 2016-03-09 09:52:25
struct CB
{
CB():a(c)
{
c = 10;
}
int c;
int& a;
};

int x = sizeof (CB); // x = 8

CB b;
int *p = &(b.a); //*p = 10
int *q = &(b.c); //*q = 10
//p 和 q 等价

printf("\n");
}

问题1:为什么此结构体大小为8,不是说引用不占用内存么,为什么结构体大小不是4
问题2:int *p = &(b.a);这句话为什么是对的,不是说不能定义指向引用的指针么
问题3:为什么p和q值是一样的?

我的想法:若引用变量a是占内存的变量,那么对其取地址当然是可以的,否则肯定是不行的,同时我发现对结构体中的a和c取地址,其地址值是一样的,那么就产了一个问题,结构体中4字节的内存空间哪里去了?
...全文
370 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2016-03-09
  • 打赏
  • 举报
回复
因为 引用通常实现为指针,并对程序员透明 所以 对引用取地址 只能取到 被引用对象的地址,(即实现引用的指针常量的值) --------不是C++语言 体系取不到,而是C++不提供语法手段,取引用本身占用的内存的地址----------- 因为那不符合C++引用的抽象语义。 引用是别名,除了初始化语法外 其他对引用的作用,都会作用于被引用的对象上。 另外,引用比指针,更有利于编译器优化(通常实现为指针常量), 所以 程序中引用,未必会占有内存空间,一切视编译器方便而定。 引用的定义具有传递性,引用之间的互相引用,会最终作用在被引用的对象上,而不是任何一个引用上
dustpg 2016-03-09
  • 打赏
  • 举报
回复
1.引用是一种方便C++程序员的一种概念, 不占内存意思是不占对象空间. 这里8字节是因为有4字节的int与4字节的地址空间。 2. 不等价于
int a = 0; int& b = a; int* c = &b;
么。 3.a是c的引用,“地址”自然一样,但是实际实现的时候, &(b.a)是对b对象地址做偏移计算, &(b.c)是对b对象中c读取值。 因为标准并未明确表示怎么实现引用,一般编译器的做法就是储存地址值,同指针的“实现”一样。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧