char的C风格转换后的不同内存分配[关闭]
Posted
技术标签:
【中文标题】char的C风格转换后的不同内存分配[关闭]【英文标题】:Different memory allocation after C-style casting for char [closed] 【发布时间】:2021-12-07 11:25:33 【问题描述】:问题是,当我将&char
转换为void*
,然后再次转换为char*
时,结果指针具有不同的地址分配。
char example = '-';
void* voidPtr = (void*)&example;
char* charPtr = (char*)voidPtr;
cout << (void*)&example << endl; // 004FFC37
cout << voidPtr << endl; // 004FFC37
cout << (void*)&charPtr << endl; // **004FFC30**
但对于 short(int、float、double 也是如此)而言,情况并非如此。
short example = 1;
void* voidPtr = (void*)&example;
short* shortPtr = (short*)voidPtr;
cout << &example << endl; // 0032FC14
cout << voidPtr << endl; // 0032FC14
cout << shortPtr << endl; // 0032FC14
为什么会这样?
【问题讨论】:
因为&charPtr
是charPtr
的位置,而不是它的值。
我认为您添加了(void*)
演员表以便字符指针将打印出地址而不是字符串?这很好,因为您不处理以空字符结尾的字符串。但是,它会在有问题的案例和工作案例之间产生相当明显的差异。为了更好地比较,您还应该在工作案例中引入演员表,如cout << (void*)&shortPtr << endl;
并在您的问题中提及使用演员表的原因。这应该会导致工作案例失败(如果您保留&
)或者更容易发现流浪&
。
【参考方案1】:
其实是一样的。就这样
cout << (void*)&charPtr << endl;
应该是
cout << (void*)charPtr << endl;
错误地,您打印的是charPtr
本身的地址,而不是charPtr
指向的地址。
【讨论】:
以上是关于char的C风格转换后的不同内存分配[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
初始化 char* 并为特定数量分配内存会添加 nullptr 字符 [关闭]