C++ 如何获取用于memcpy的浮点地址?

C++ 如何获取用于memcpy的浮点地址?,c++,c,pointers,memory-address,memcpy,C++,C,Pointers,Memory Address,Memcpy,我试图用浮点变量的内存地址(数组长度为4字节=指针)填充byte/char数组,但无论我做什么,它都会得到浮点值而不是地址: float f = 20.0f; memcpy(data, &f, sizeof(data)); 使用以下工具调试它: printf("Array: %#X, %#X, %#X, %#X", data[0], data[1], data[2], data[3]); …以十六进制格式给出浮点值(20.0): Array: 0, 0, 0XA0, 0X41 我

我试图用浮点变量的内存地址(数组长度为4字节=指针)填充byte/char数组,但无论我做什么,它都会得到浮点值而不是地址:

float f = 20.0f;

memcpy(data, &f, sizeof(data));
使用以下工具调试它:

printf("Array: %#X, %#X, %#X, %#X", data[0], data[1], data[2], data[3]);
…以十六进制格式给出浮点值(20.0):

Array: 0, 0, 0XA0, 0X41

我需要的是浮点的内存地址。我试着用一些不同的方法对它进行强制转换/取消引用,但无法让它工作…

这就是
memcpy
的工作原理:它需要一个指向它将复制的数据的指针。您的数据是指向浮点的指针,因此您需要将指针传递给指向浮点的指针:

#include <cstring>

int main() {
   float f = 20.0f;
   float* pf = &f;
   char data[sizeof(pf)];
   memcpy(data, &pf, sizeof(data));
}
#包括
int main(){
浮球f=20.0f;
浮动*pf=&f;
字符数据[sizeof(pf)];
memcpy(数据和pf、sizeof(数据));
}

这是
memcpy
的工作原理:它将指针指向它要复制的数据。您的数据是指向浮点的指针,因此您需要将指针传递给指向浮点的指针:

#include <cstring>

int main() {
   float f = 20.0f;
   float* pf = &f;
   char data[sizeof(pf)];
   memcpy(data, &pf, sizeof(data));
}
#包括
int main(){
浮球f=20.0f;
浮动*pf=&f;
字符数据[sizeof(pf)];
memcpy(数据和pf、sizeof(数据));
}

对于C解决方案,将十六进制数据保存为复合文字

地址在块结束前有效。

根据需要调整endian/打印顺序。

对于C解决方案,将十六进制数据保存为复合文字

地址在块结束前有效。

根据需要调整endian/打印顺序。

也许您还应该提到,在64位机器(现在很常见)上,指针应为8个字符/字节。@Bob\uuuuux:当然,谢谢!Zax Ftw:阅读上面的内容,一般来说,最好在单独的问题中描述一下你在做什么,并询问这样做是否是一件好事。但这是32位的,所以指针是4字节,我不想发布更多细节,因为这完全是无关的和小众的东西。也许你也应该在64位机器上提到这一点(现在很常见)指针应该是8个字符/字节。@Bob\uuuu:当然,谢谢!Zax Ftw:阅读上面的内容,一般来说,最好在单独的问题中描述一下你在做什么,并询问这样做是否是件好事。但这是32位的,所以指针是4字节,我不想发布更多细节,因为这完全是无关的和利基的东西。感兴趣的问题,为什么需要它?感兴趣的问题,为什么需要这个?为什么这个复合文法不在C++中编译呢?我很喜欢这个单行解决方案,但是括号错误太多。@ ZAXFTW IRC,C++不支持复合文字。请参阅好奇为什么这个复合文字不能在C++中编译。我很喜欢这个单行解决方案,但是括号错误太多。@ ZAXFTW IRC,C++不支持复合文字。看见
0xffffcba8
0xffffcba4
A4 CB FF FF 00 00 00 00