将指针指向结构以及显示哪个变量的函数(实际上类似于'在&python中的运算符)

时间:2016-10-31 13:53:34

标签: c function struct parameter-passing

抱歉,我不熟悉c

我想编写一个函数,它将指针指向结构,并将哪个成员显示为参数......

我的目标是' in' python的运算符...就像我将传递要在结构数组上搜索的键和值并相应地返回

我尝试过一点,这就是我的意思...... 它的工作原理是解决这个问题吗?这很好或者风险很大,因为我们直接使用内存并且可能更容易做到这一点?

textBox.StringProperty = null;

5 个答案:

答案 0 :(得分:0)

不,首先,您无法在定义期间为结构成员分配值,因为要为成员分配值需要具有该类型的实例(变量)。它不能是结构定义本身中的变量(成员)。

您已创建类型为DeviceEventEmitter的变量Re,现在您必须使用成员访问运算符structure Re访问该结构的每个成员,并根据需要指定值。

那就是说,

  • 您无法传递变量名称并希望对其进行一些操作。为此选择不同的方法。
  • 对于标准编译,
  • .对于托管环境至少应为int main()

答案 1 :(得分:0)

都能跟得上!使用您的方法无法实现此功能。

您在main中看起来像结构成员(如x),将被该函数视为另一个变量。

此外,相同的功能无法在C中返回多种类型的数据。

您可能想要了解C中的联盟。它们将更适合场景。

简介: 工会几乎就像结构一样,但在工会中,一次只能有一个成员活跃(或分配一个值)。它们可用作returntype(according to variable)部分的替代。

另外,尝试自己阅读C(结构,函数等)的一些基础知识。你可以自己回答你的问题!

答案 2 :(得分:0)

你想要实现的目标不容易在C中完成。函数必须具有特定的声明返回类型;你不能拥有一个有时返回int的函数,有时候是一个char。

您可以使用union作为返回类型。或者返回一个指向值(void *)的无类型指针并将其强制转换为适当的类型。在任何一种情况下,调用函数的代码都需要使用结构成员的一些知识来编写,我认为这些代码首先要做到这一点。

对于函数体本身,您基本上需要使用case语句或级联系列的if语句并对每个可能的选项进行硬编码。同样,它不清楚你通过这样做获得了什么。

答案 3 :(得分:0)

使用enum可视化结构。现在你所要做的就是:

#include <stdio.h>

typedef enum {
    x,
    y,
    a
} ReEnum;

typedef struct Re{
    int x;
    int y;
    char a;
} Re;

int func(Re *r, ReEnum en)
{

    switch(en) {
        case x:
            printf("x == %d\n", r->x);
            break;
        case y:
            printf("y == %d\n", r->y);
            break;
        case a:
            printf("c == %c\n", r->a);
            break;
        default:
        return -1;
    }

    return 0;
}


int main(void)
{
   Re r;

   r.x = 5;
   r.y = 10;
   r.a = 'A';

   func(&r,x);// should return int 5;
   func(&r,y); //should return int 10
   func(&r,a);// should return char 'A'

   return 0;
}

答案 4 :(得分:0)

而不是常规功能使用宏

    #define func(stru, el) ((stru)->el)

或 - 给出相同的结果

    #define func(stru, el) ((*stru).el)