c++指针有帮助

C++ Pointers help?

本文关键字:有帮助 指针 c++      更新时间:2023-10-16

我需要在c++中使用指针的一点帮助。很抱歉我是初学者,但我真的不太懂它们。我已经在cplusplus.com网站上阅读了关于指针的教程,所以请不要建议。

我基本上有一个变量,它包含另一个变量的名称,并且我希望通过holder访问该变量。我相信我需要使用指针,如果我错了,请纠正我。

int a;
string b;
a = 10;
b = "a";

我需要通过变量"b"的内容访问变量"a"。

为了更好地理解这一点,我是这样使用它的:

int a;
a = 20;
void getVar(string name) {
    cout << name;
}
getVar("a");

但是正如你所看到的,在第五行,它只会计算name的值,在这个例子中是"a",但是我想让它计算name包含的变量的值,所以我想让它输出"20"

如果您需要名称与值关联,请考虑关联数组,或者称为字典和映射。标准模板库有std::map,您可以使用它将文本与值关联:

#include <map>
#include <string>
std::map<std::string, int> my_map;
my_map["A"] = 20;
cout << my_map["A"] << endl;

你正在考虑的被称为(反射),这是c++不支持的。但是,您可以使用指针来访问它指向的变量中的内容:

int a = 5; //int variable that stores 5
int *b = &a; //int pointer that stores address of a
(*b) = 10; //stores 10 into address that b points to (a)
cout << a; //prints 10

您试图实现的目标在编译语言中是不可能的(不考虑反射)。您可以使用映射数据结构完成类似的工作。

theMap["a"] = 20;

和相应的

void getVar(string key){
     cout << theMap[key];
}
可以用 调用的

getVar("a");

注意,在这个极其简单的示例中,theMap必须在函数的作用域中,就像在类或名称空间中一样。

如果你使用指针,你只是使用了一个不适合你的例子的间接层次。例如,参见Chads的回答。

没有真正的方法可以像这样通过名称访问变量,除非你创建了某种容器类,它有一个name成员供你查找。我不确定这和指针有什么关系

你所要求的被称为"反射"或"自省"——在运行时为程序的对象(类、变量、函数等)使用设计时名称的能力。c++不支持这种开箱操作——设计时名称在编译时被剥离。

在c++中有一些库提供了这个功能;但也有一些语言,反射是语言的一部分。例如,Python或JavaScript。

也许这适合你:

int a = 5;
class b {
public:
   b(int &x) { ref_ = x; }
   int operator()(void) { return ref_; }
private:
   int &ref_;
}
b my_b(a);
my_b() /* -> 5 */;

你的代码没有使用指针。你试图将字符串转换为标识符并打印它的结果,我不知道这是否可能。如果你打算使用指针,你的代码应该像这样:

int a = 20;
int* b = &a;
cout << *b;

仅输出整数的快速修复:

int;A = 20;

void getVar(int name) {cout & lt; & lt;名称;}

getVar (a),

如果你需要函数对任何类型的变量都有效,也许可以考虑使用模板函数。

编辑:下面是模板程序的代码:

#include <iostream>
#include <string>
using namespace std;
template <class T>
void getVar(T name){
    cout<<name<<endl;
}
int main()
{
string x="hee";
int y=10;
getVar(x);//outputs hee
getVar(y);//outputs 10
return 0;
}