繁体   English   中英

自动将关系分配给结构成员。 (C)

[英]Assign relationship to struct members, automatically. (C)

我定义了一个如下所示的结构(在 C 中)。

struct Temp {
int C;
int F;};

确实如此

(C × 9/5) + 32 = F

由于我有几个“struct Temp”类型的变量,因此定义一个子程序来进行计算并为每个变量调用它并不容易。 如果以下代码是可能的,那将是一个解决方案。

struct Temp {
int C;
int F = (C × 9/5) + 32;};

当定义了“struct Temp”类型的新变量时,如何自动应用这种关系。

先感谢您。

您可以通过初始化数组来做到这一点,但为此,您必须首先为 C 分配一个值。 例如

struct abc{
int a;
int b;
};
int z = 97;
struct abc pqr = {z, z+9/4};

现在 pqr 中变量 a 的值是 4 而 b 是 6 你也可以通过定义一个宏来做到这一点。 例如

#define    MYSTRUCT(NAME, VAL)    struct abc NAME = {VAL, VAL+9/4};

然后创建一个新结构为:

MYSTRUCT(pqr, 97);
printf("%d, %d", pqr.a, pqr.b);

结构是数据类型,因此您无法使用新值初始化数据类型,就像您无法操作“int”数据类型的内部属性一样。 但是我们可以在之后定义“ints”,所以我们也可以对“structs”做同样的事情。 就像其他人说的那样,你必须写一个 function 来做到这一点

下面是使用 function 宏轻松完成此操作的示例。 但是请注意,您的 C 和 F 类型都是 integer 因此在尝试转换时它们会被截断。 最好将它们声明为浮点数或双精度数。

#include <stdio.h>
#define initF(x) (x.F = (x.C * 9/5) + 32)

struct Temp {
        int C;
        int F;
};
int main(int argc, char** argv) {
        struct Temp t;
        t.C = 32;
        initF(t);
        printf("Temp F = %d\n", t.F);
}

您想要的称为 C 不支持的属性。 您可以通过两种方式做到这一点,第一种方式是定义一个 function 每次都进行计算,如下面的代码。 此方法是非缓存的。

int GetF(struct Temp temp)
{
    return temp.C * 1.8 + 32;
}

另一种方式(缓存)是将C值设置为 function 以计算并保存F值,您以后可以快速使用它。

int SetC(struct Temp temp, int c)
{
    temp.C = c;
    temp.F = c * 1.8 + 32;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM