如何使用变量命名结构?

时间:2011-07-04 00:48:04

标签: c data-structures naming-conventions

这很简单,但我无法弄清楚。如何使用变量命名结构,例如......

 char *QueryName = "GetAirports";   
 Query QueryName = malloc(sizeof(Query) + RecordCount*sizeof(int));

其中“Query”是结构的名称。谢谢你的帮助。

4 个答案:

答案 0 :(得分:1)

在C中,您必须使用struct关键字来使用结构类型,或者使用typedef,如下所示:

typedef struct query
{
  // ....
} query_t;

int main ()
{
  query_t *q = malloc (sizeof (query_t));
  return 0;
}

答案 1 :(得分:1)

我假设您正在尝试重新创建更多动态语言中允许的内容,例如此PHP示例:

$QueryName = "GetAirports";
$$QueryName = array(/*...*/);

通过更改$QueryName变量的值,您可以引用另一个对象吗?

如果是这样,简单的答案是:你不能用C语言做到这一点。

但是,您可以使用单个变量在不同时间指向多个实例。

Query *query_ptr = &myFirstQueryObject;
query_ptr = &mySecondQueryObject;
/* etc */

但是从您的示例代码中看来,您只是想分配一个结构?如果是这样的话:

typedef struct Query {
    /* fields here, e.g: */
    int id;
    int age;
} Query_t;

int main()
{
    Query_t *query = malloc(sizeof(Query_t));

    query->id = 1;
    query->age = 0;

    /* etc. */

    return 0;
}

也许查找C结构和指针。

编辑所以从进一步的评论显然你想要创建一个char* 名称Query对象的地图?有几种方法,但最简单的方法是创建两个数组:

char *names[];
Query *queries[];

只要两个数组具有相同数量的元素,并且names中的* n * th元素与queries中的* n * th相对应,就可以遍历{{1}直到找到匹配的字符串,然后使用当前索引取消引用names中的相应对象,或反之亦然

答案 2 :(得分:1)

我不确定我是否认为需要使用该变量。为什么不这样做:

Query GetAirports = malloc(sizeof(Query) + RecordCount*sizeof(int));
Query GetRunways = malloc(sizeof(Query) + RecordCount*sizeof(int));

由于C是静态类型的编译语言,因此这里的对象名称如GetAirportsGetRunways在编译时使用,但在运行时不存在 。因此,不可能在运行时使用字符串变量的内容来按名称引用对象。

答案 3 :(得分:1)

简要回答你的问题:你做不到。您无法在运行时分配标识符的名称。标识符是编译时概念,在编译结果中通常不可见(通常)。 C不是一种反射语言,并且不能在运行时调用它自己的编译器。