C:使用=(等于)复制指针数据

时间:2015-02-28 01:28:32

标签: c pointers

这是我在这里的第一篇文章。我试图找到一个类似的问题,但找不到任何问题,因此我发布了这个问题。

我试图将结构指针中的数据复制到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

2 个答案:

答案 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更好。