如何获取用于 memcpy 的浮动地址?

How to get float address for use with memcpy?

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

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

我需要的是float的内存地址。我以不同的方式尝试了 casting/dereferencing,但无法正常工作...

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

#include <cstring>

int main() {
   float f = 20.0f;
   float* pf = &f;
   char data[sizeof(pf)];
   memcpy(data, &pf, sizeof(data));
}

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

#include <stdio.h>

int main(void) {
  char data[sizeof (float*)];
  printf("%p\n", (void*) data);
  float f;
  printf("%p\n", (void*) &f);

  memcpy(data, &(float *){&f}, sizeof (float*));
  for (unsigned i = 0; i<sizeof data; i++) {
    printf("%02hhX ", data[i]);
  }
  puts("");
}

输出

0xffffcba8
0xffffcba4
A4 CB FF FF 00 00 00 00 

该地址在块结束前有效。
根据需要调整 endian/print 顺序。