我有一個變量表。是否可以創建一個變量名稱數組?
int var1;
int var2;
int var3;
我想明確地通過名稱來訪問這些變量的值,比如var1 = 3;
或作爲陣列(在for
環路):
for (i = 0; i < sizeof(vars_array)/sizeof(int); i++)
{
vars_array[i] = nnn;
}
我怎樣才能做到這一點?
我有一個變量表。是否可以創建一個變量名稱數組?
int var1;
int var2;
int var3;
我想明確地通過名稱來訪問這些變量的值,比如var1 = 3;
或作爲陣列(在for
環路):
for (i = 0; i < sizeof(vars_array)/sizeof(int); i++)
{
vars_array[i] = nnn;
}
我怎樣才能做到這一點?
不能使用:
for (i = 0; i < sizeof(vars_array); i++)
{
vars_array[i] = nnn;
}
但是,如果你願意來存儲數組的指針,你可以使用:
int* vars_array[] = {&var1, &var2, &var3};
for (i = 0; i < sizeof(vars_array)/sizeof(vars_array[0]); i++)
{
*vars_array[i] = nnn;
}
不,你不能做到這一點。 (注意:你可以用一些可怕的內存映射把它關掉,不要這樣做)。您通常希望避免通過名稱動態引用變量,即使語言允許。它使理解代碼非常困難。你想要的是一個數組或hash table成對存儲和檢索數據。
如果變量簡單地編號爲var1
,var2
,var3
...則不是使用單個變量,而是將值放入數組中。
int vars[] = { 23, 42, 99 };
for(int i = 0; i < 3; i++) {
printf("vars%d: %d\n", i, vars[i]);
}
如果變量名不是數字,或者號碼不連續的,那麼一般的想法是使用一個哈希表。這就像一個數組,但不是使用它使用字符串的索引號。查找速度很快,但它本質上沒有順序。
C沒有內置哈希,因此您必須使用類似Gnome Lib這樣的庫。
#include <glib.h>
#include <stdio.h>
int main() {
/* Init a hash table to take strings for keys */
GHashTable *vars = g_hash_table_new(g_str_hash, g_str_equal);
/* For maximum flexibility, GHashTable expects the keys and
values to be void pointers, but you can safely store
integers by casting them */
g_hash_table_insert(vars, "this", (gpointer)23);
g_hash_table_insert(vars, "that", (gpointer)42);
g_hash_table_insert(vars, "whatever", (gpointer)99);
/* And casting the "pointer" back to an integer */
printf("'this' is %d\n", (int)g_hash_table_lookup(vars, "this"));
g_hash_table_unref(vars);
return 0;
}
感謝您的信息。我會看看教程 –
當然可以。您將需要一個聯盟:「名」
union {
struct {
int var1, var2, var3;
};
int vars_array[3];
}name;
儘管這樣,你應該用你的前綴變量實例。出於某種原因,您不能省略它並將封裝空間中的標識符(作爲未命名的結構和聯合成員)導出。
您的訪問數組元素(這直接映射到你的變量 - 最終?)代碼應該是這樣的:
for (i = 0; i < sizeof(name.vars_array)/sizeof(int); i++)
{
name.vars_array[i] = nnn;
}
好的,但我決定嘗試一個你知道的新事物。 – AnArrayOfFunctions
我更新了我的答案。現在一定沒問題。 – AnArrayOfFunctions
你能解釋一下使用情況? –
簡答:第 –
爲什麼你首先使用單獨的變量而不是數組? – Barmar