这是我在这里的第一篇文章。我试图找到一个类似的问题,但找不到任何问题,因此我发布了这个问题。
我试图将结构指针中的数据复制到C中的另一个结构指针,如下所示。看起来像只使用'='就可以了。有人可以解释如何在不使用memcpy()的情况下将指针srcStruct中的数据复制到另一个内存位置(由destStruct指针)吗?
这是指针属性吗?这样做有风险吗?
struct myTestStruct
{
short variable1;
short variable2;
};
struct myTestStruct *destStruct = (struct myTestStruct *)malloc(sizeof(struct myTestStruct));
struct myTestStruct *srcStruct = (struct myTestStruct *)malloc(sizeof(struct myTestStruct));
srcStruct->variable1 = 11;
srcStruct->variable2 = 12;
*destStruct = *srcStruct;
提前致谢。
此致 AJK
答案 0 :(得分:1)
通过使用解除引用运算符*
,您基本上将指针指向的数据视为常规变量。如果不复制指针,结构将按值复制,而不是通过引用复制,因此就像将int复制到另一个int一样。您实际上是通过使用取消引用运算符*
执行以下操作:
struct myTestStruct destStruct, srcStruct;
srcStruct.variable1 = 11;
destStruct = srcStruct; //this gets copied by value
答案 1 :(得分:0)
你在这里做的事实上并没有实际连接到指针;它通常是C语言中结构的属性,它们可以作为整个单元分配一个=
操作。当你取消引用一个指针时,你直接在表达式中使用指向的值,所以你真正得到的,在双方都有一个取消引用,是从值结构到另一个值结构的赋值。指针都已经扩展了#34;保留了整个结构的值。
如何复制值取决于编译器。它可能会以最有效的方式发出自定义指令,但如果需要,它也可以使用memcpy
。这样做绝对没有风险 - 可分配的结构是C语言的核心元素,不会消失!它完全是惯用的,通常是做任何你需要的数据的最佳方式,需要将数据从一个结构复制到另一个结构。当然比不必要地调用memcpy
更好。