为什么要使用结构的第一个元素的地址,而不是结构本身?[英] Why use address of first element of struct, rather than struct itself?

本文是小编为大家收集整理的关于为什么要使用结构的第一个元素的地址,而不是结构本身?的处理方法,想解了为什么要使用结构的第一个元素的地址,而不是结构本身?的问题怎么解决?为什么要使用结构的第一个元素的地址,而不是结构本身?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我刚刚来到工作中的另一个代码库,开发人员在复制/比较/设置时始终使用结构的第一个元素的地址,而不是结构本身.这是一个简单的例子.

首先有一个结构类型:

typedef struct {
    int a;
    int b;
} foo_t;
然后有一个函数,使这种结构的副本:

void bar(foo_t *inp)
{
    foo_t l;
    ...
    memcpy(&l.a, &inp->a, sizeof(foo_t));
    ...
}

我本身不会以这种方式写入memcpy,我开始怀疑原始开发人员在c中没有完全掌握指针和结构.然而,现在我在两个中看到了这一点不相关的代码基础,没有普通开发人员,所以我开始怀疑自己.

为什么人们想要使用这种风格?

推荐答案

没有人应该这样做. 如果您重新排列了结构成员,则遇到麻烦.

其他推荐答案

而不是那样:

memcpy(&l.a, &inp->a, sizeof(foo_t));

你可以做到:

memcpy(&l, inp, sizeof(foo_t));

虽然它可能是危险和误导性,但两个陈述实际上在这里做了同样的事情,因为C保证在第一结构成员之前没有填充.

但最好的只是使用简单的赋值运算符复制结构对象:

l = *inp;

为什么人们想要使用此样式?

我的猜测:无知或糟糕的纪律.

其他推荐答案

一个人不会.如果您在STRACH中移动a或在其之前插入成员,则会引入内存粉碎错误.

本文地址:https://www.itbaoku.cn/post/359135.html