C++ 关于使用memcpy将表达式值复制到指针的查询

C++ 关于使用memcpy将表达式值复制到指针的查询,c++,memory-management,memcpy,C++,Memory Management,Memcpy,我希望将表达式(即int)的结果设置为int指针。如果我这样做: int* a = new int; memcpy(a, (int*)(3+4), sizeof(int)); 我很难理解它的预期行为。Wll按预期将值7复制到a中。或者它会导致一些未定义的行为不,这不会复制其中的值7。相反,您会得到未定义的行为 将写入memcpy(dest,source,size)想象为“请转到source指定的内存地址并从中复制size字节。如果写入(int*)(3+4),您会得到一个数值为7的指针,这意味着

我希望将表达式(即int)的结果设置为int指针。如果我这样做:

int* a = new int;
memcpy(a, (int*)(3+4), sizeof(int));

我很难理解它的预期行为。Wll按预期将值7复制到a中。或者它会导致一些未定义的行为

不,这不会复制其中的值7。相反,您会得到未定义的行为

将写入
memcpy(dest,source,size)
想象为“请转到
source
指定的内存地址并从中复制
size
字节。如果写入
(int*)(3+4)
,您会得到一个数值为7的指针,这意味着它指向内存地址7。正如您不会期望街区上的137号房屋居住着名为137先生和137夫人的人一样,您也不应该期望内存地址7的内容是数值7

事实上,内存地址7甚至不太可能是您可以读取或写入的存储器。您基本上是“虚构的”一个带有打字的地址,没有理由相信那里有任何有意义的东西。想象一下,在信上写下一个虚假的邮寄地址,然后把它投进邮件中。它真正到达任何人的几率都很小,如果它真的到达了他们,他们将不知道你为什么要联系他们


从语言的角度来看,这是未定义的行为,在大多数系统上它都会出错。

不,这不会复制其中的值7。相反,您会得到未定义的行为

将写入
memcpy(dest,source,size)
想象为“请转到
source
指定的内存地址并从中复制
size
字节。如果写入
(int*)(3+4)
,您会得到一个数值为7的指针,这意味着它指向内存地址7。正如您不会期望街区上的137号房屋居住着名为137先生和137夫人的人一样,您也不应该期望内存地址7的内容是数值7

事实上,内存地址7甚至不太可能是您可以读取或写入的存储器。您基本上是“虚构的”一个带有打字的地址,没有理由相信那里有任何有意义的东西。想象一下,在信上写下一个虚假的邮寄地址,然后把它投进邮件中。它真正到达任何人的几率都很小,如果它真的到达了他们,他们将不知道你为什么要联系他们


从语言的角度来看,这是一种未定义的行为,在大多数系统上都会出现故障。

内存地址
7
处似乎不太可能存在有效的
int
值。这是一个很长的说法
(int*)(3+4)
毫无意义;此代码显示未定义的行为。将其设置为
*a=3+4;
地址
0x0000007
在系统保留内存范围内。谁知道您将在那里得到什么值(分段错误除外)为什么你要把C++分配与<代码>新< /C> >和C<代码> MeMeime>代码>混合?在内存地址<代码> 7 > /COD>中,似乎不可能有一个有效的<代码> int <代码>值。这是一个很长的说法:<代码>(int *)(3 + 4)是无稽之谈;这个代码显示了不明确的行为。使它<代码> *= 3 +4;< /COD>地址>代码> 0x00 00 7< <代码>在系统预留内存范围内下降。谁知道你将得到什么值(除了分段错误)。为什么你要将C++分配与<代码>新< /COD>和C<代码> MeMeime<代码>混合?