这很简单,但我无法弄清楚。如何使用变量命名结构,例如......
char *QueryName = "GetAirports";
Query QueryName = malloc(sizeof(Query) + RecordCount*sizeof(int));
其中“Query”是结构的名称。谢谢你的帮助。
答案 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是静态类型的编译语言,因此这里的对象名称如GetAirports
和GetRunways
在编译时使用,但在运行时不存在 。因此,不可能在运行时使用字符串变量的内容来按名称引用对象。
答案 3 :(得分:1)
简要回答你的问题:你做不到。您无法在运行时分配标识符的名称。标识符是编译时概念,在编译结果中通常不可见(通常)。 C不是一种反射语言,并且不能在运行时调用它自己的编译器。