例如:就像我有一个变量char str[3]="abc";
那么我可以使用这个“abc”作为另一个变量的名称(比如一个整数),这样我就可以在abc
中存储任何值。
如果是,那么在'abc'中存储值时,如下所示:
int abc=123;
我可以通过str
引用abc作为变量吗?
答案 0 :(得分:5)
没有。你所谈论的是反思,一种访问环境内部细节的方法。 C目前没有内置到该语言中。
有一些方法可以实现相同的效果,例如从字符串到整数指针的映射数据结构,但它有点混乱。作为一个示例:
int abc, def;
char *strName[] = {"abc", "def"};
int *address[] = { &abc, &def};
:
char *key = "def";
int newVal = 42;
for (i = 0; i < sizeof (strName) / sizeof (*strName); i++)
if (strcmp (key, strName[i]) == 0)
*(address[i]) = newVal;
这将通过键列表,直到找到匹配的键,然后使用地址列表中的等效指针来修改变量。
但是,老实说,一旦你不得不做一些黑暗和狡猾的事情,你可以用更合适的数据结构来做。
例如,一个地图,其中的值存储在实际地图中,而不是保存“外部”整数的地址。
答案 1 :(得分:2)
不仅你不能,而且它是C语言的意识形态的一部分。变量名在运行时不存在,变量内容在编译时不重要。
答案 2 :(得分:0)
通过查看源代码以及运行原始二进制可执行文件时“程序本身看到的”,您对程序的看法有所不同。在可执行文件中,没有变量名这样的东西。
假设我们有这个计划:
char str[4]="abc"; // note that you need to allocate 4 bytes
int abc=123;
以上是源代码,这是程序员看到的。程序本身只“看到”类似的东西:
在某个地址0x12345678处,有4个字节。它们是0x61,0x62,0x63,0x00(ASCII码)。由于源代码中的char类型,程序将以单个字节的形式访问这些内容。但该程序实际上也没有看到类型。
然后在地址0x1234567C,内存中进一步向下4个字节,我们有另外4个字节(假设32位CPU)。它们包含值0x0000007B(123)。程序只将这个int变量引用为0x1234567C,它不知道程序员在源代码中将其称为abc。
答案 3 :(得分:0)
您可以考虑代码生成。
使用XML:
<var type="int" name="abc" />
生成代码:
int abc;
(输入XML本身本身可以使用char str []作为输入创建