例如:像我有一个可变char str[3]="abc";
然后我可以使用这个“ABC”作为另一变量(比如一个整数)的名称,这样我可以在abc
存储任何值。 如果是,则同时存储在类似这样的“ABC”的值: int abc=123;
我可以引用ABC可变通过str
参考呢?在C程序中,我们可以使变量的名称成为变量吗?
回答
不,你说的是反射,一种访问环境内部细节的方式。 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;
这将经历键列表,直到它找到了一个匹配,则使用等效指针地址列表修改的变量。
但是,在所有诚实,一旦你有做一些黑暗和狡猾这样的,你可能也有一个更合适的数据结构,做到这一点。
例如,一个地图,其中的值存储在实际地图中,而不是保存“外部”整数地址。
但我认为这是可能的在VB中..我是否正确? –
@MKSingh它也可以在PHP中使用。所以呢? –
其实我有一个字符串,它将列的名称存储在数据库中。我想创建一个像char * get(char [] param)的函数; 现在这个参数将读取表中不同列名的字符串。无论名称出现在param中,我的程序都应该从表中获取该列中的值。所有列都是表中的字符类型。 这怎么能实现 –
不仅你不能,而且它是C语言的意识形态的一部分。变量名在运行时不存在,变量内容在编译时不应该存在。
我不同意'在编译时变量内容不应该重要。你可以有一个编译时常量变量来指定一个数组的大小,在编译过程中它确实很重要。 –
没有双关的意思,但不是“常量变量”是一个字面的矛盾吗? :) –
是的,但不是在编程上下文。 'const int x = 0'是一个常量变量... –
还有就是你通过查看源代码中看到你的程序有什么区别,并运行原始的二进制可执行文件,当你的“节目本身看见”。在可执行文件中,没有变量名称之类的东西。
比方说我们有这样的计划:
char str[4]="abc"; // note that you need to allocate 4 bytes
int abc=123;
以上是源代码,这是程序员所看到的。程序本身只是“看到”类似的东西:
在某些地址0x12345678,有4个字节。它们是0x61,0x62,0x63,0x00(ASCII码)。由于源代码中的字符类型,程序将以单个字节的形式访问它们。但是程序实际上并没有看到这种类型。
然后,在地址0x1234567C,4个字节在存储器进一步向下,我们有另一个4个字节(假定32位CPU)。它们包含值0x0000007B(123)。该程序仅将此int变量指向0x1234567C,它不知道程序员在源代码中将其称为abc。
您可以考虑代码生成。
随着XML:
<var type="int" name="abc" />
生成代码:
int abc;
(输入XML本身可以自身与焦炭海峡创建[]作为输入)
- 1. 我们可以使用变量类名来声明objective-c中的变量吗?
- 2. 我们可以以变量名称访问$ _POST吗?
- 3. 我可以访问Objective C中实例变量的名称吗?
- 4. 子程序的名称可以是fortran中的变量吗?
- 5. 我可以使用变量的值作为c#中属性的名称吗?
- 6. Python:我可以在变量中存储变量名吗?
- 7. 我们可以将String值作为变量参考吗? (变量名)
- 8. 我可以添加两个变量来在JavaScript中创建变量名称吗?
- 9. 我可以合并名称保持为变量的数组吗?
- 10. 我们可以在noexcept规范中引用成员变量吗?
- 11. 我们可以在接口中有成员变量吗?
- 12. 我可以在Javascript中使用冒号作为变量名吗?
- 13. 我们可以在php代码中使用javascript变量和javascript变量吗?
- 14. 我可以使用常量名称的变量访问PHP类常量吗?
- 15. 我们可以用{来声明变量变量吗?
- 16. 我们可以在SELECT查询中使用主机变量作为表名吗?
- 17. C++我可以使用变量值声明一个Struct作为Struct名称吗?
- 18. 使用可变参数,我可以根据变量名称为变量赋值吗?
- 19. 我可以在PHP中使用变量变量,例如$$ var吗?
- 20. 程序集 - 我可以在程序中声明变量吗?
- 21. 我可以转义变量名称中的字符吗?
- 22. 我们可以将变量数据转换成变量
- 23. 我们可以在C++中删除一个变量的名字吗?
- 24. 你可以在C++的类中有变量的变量吗?
- 25. 我可以使用变量作为Microsoft Access VBA中的控件的名称吗?
- 26. 我们可以在Yosys脚本中使用变量吗?
- 27. 我们可以在FOR-IN循环中使用变量吗
- 28. 我们可以在Siddhi SQL语句中使用变量吗?
- 29. Ansi c预处理程序:我可以将宏名称和参数连接成单个变量名吗?
- 30. 我可以在swift中使用变量的值作为新变量吗?
没有它不是可能。另外,'char str [3] =“abc”;'是危险的。像这样的“字符串”以null('\ 0')字符结尾。这意味着你需要阵列的宽度至少为4。 – ArjunShankar
[C反射支持]的可能的重复(http://stackoverflow.com/questions/1353022/reflection-support-in-c) –
MK辛格,我认为@Fredrik得到的是你可能想要去回过头来回答你的旧问题,并接受最能回答问题的答案(大绿剔号)。这是可能的,只有三分之一的问题得到了令人满意的回答,但您至少应该检查:-) – paxdiablo