C++中的引用实质是什么?在内存中如何存储?
解决方案 »
- 对话框程序不能用tree control等高级控件?
- HELP !! 我的VC++程序里面 断点调试 后,总进入一个汇编调试界面 ???
- 很奇怪的问题,为什么UInt64 tmp1 = (10*1024*1024*1024); 结果是 0 !!!!
- 这样不行吗?那构造函数是干嘛的?
- 高分求助,请问如何实现不规则区域的透明填充,谢谢,先给50
- 菜鸟问题:dll和com之间是什么关系?
- 请问如何在WINNT中屏蔽CTRL+TAB、CTRL+ALT+DEL等功能键。
- ◎ 谁在InstallShield里调用过自己写的DLL?怎么我的老失败呀!
- 非客户区用指定颜色填充,拖动时出问题
- 一个关于unicode字符串的问题
- 大哥 大姐都进来看看帮帮小弟 !!!!!
- 如何使用多个CMap
// Sample1.cpp #include "stdafx.h"
#include <conio.h>
#include <iostream>#pragma pack(push, S, 1)typedef struct _A
{
_A(int i, int &j, float f, double &d, void *p, void *& q) :
u(i), v(j), w(f), x(d), y(p), z(q)
{
} int u;
int &v;
float w;
double &x;
void* y;
void* &z;
} A;struct B
{
int x;
int &y;
};#pragma pack(pop, S)#define GETCHAR(x) (char(((x) > 9) ? ((x) - 10) + 'A' : (x) + '0'))void PrintMemory(void *pStart, size_t size)
{
for(unsigned char * p = reinterpret_cast<unsigned char*>(pStart);
size > 0; size--, p++)
{
std::cout << GETCHAR((*p) >> 4) << GETCHAR((*p) & 0x0F) << " ";
} std::cout << std::endl;}void PrintPointer(void *p)
{
PrintMemory(&p, sizeof(void*));
}int _tmain(int argc, _TCHAR* argv[])
{
char szBuffer[] = "hello, world";
int i = 2;
double d = 5.6;
void * pv = szBuffer + 1; std::cout << "&i=";
PrintPointer(&i); std::cout << "&d=";
PrintPointer(&d); std::cout << "&pv=";
PrintPointer(&pv); A a(1, i, float(3.4), d, szBuffer, pv); PrintMemory(&a, sizeof(A)); getch(); return 0;
}
&i=AC FE 12 00
&d=B4 FE 12 00
&pv=B0 FE 12 00
01 00 00 00 AC FE 12 00 9A 99 59 40 B4 FE 12 00 BC FE 12 00 B0 FE 12 00
可以看出,在对象a的第三个字节处,内存的值跟i的地址一样,而这个地方正好是i的引用。其他两个引用类同。
{
for(unsigned char * p = reinterpret_cast<unsigned char*>(pStart);
size > 0; size--, p++)
{
std::cout << GETCHAR((*p) >> 4) << GETCHAR((*p) & 0x0F) << " ";
} std::cout << std::endl;}
///////////////////////////
arxing(阿行) :
这个函数我看不懂,好难哟。有祥解吗?
关键是下面那行不懂。。
std::cout << GETCHAR((*p) >> 4) << GETCHAR((*p) & 0x0F) << " ";