【问题标题】:String Value is the name of an int pointerString Value 是 int 指针的名称
【发布时间】:2018-03-19 13:32:26
【问题描述】:
struct token{ string type; string value;};

//Global variables:
int reg[10]={-1,...,-1};
int* R0 = reg;

... down in some func...
cout<< *(R0)<< endl;//OUTPUTs -1
int valInR0= *reinterpret_cast<int*>(&token.value) //contains string "R0"

问题是我有一个结构,它有一个名为 value 的字符串成员来存储不同的名称,当我尝试从字符串中取出一个 int 指针的名称时,我无法弄清楚如何让它引用回到 int 指针并取消引用它的值。

就像上面的例子一样,从我的结构中取出字符串 val "R0" 然后使用它来访问 int *RO 是我试图完成但没有成功的事情。

【问题讨论】:

  • 你不能这样做,符号在运行时不可用。
  • 对于这种事情你可能想使用std::map<std::string, int>
  • int valInR0= *reinterpret_cast&lt;int*&gt;(&amp;token.value) 这毫无意义。不要使用强制转换和指针来隐藏编译器错误。您的回答 int val = (token.value[1]-ASCII) 也可能出错。也许您的意思是声明 int value 而不是 string value
  • @BarmakShemirani:谢谢。我正在从存储在我的结构的 token.value 成员中的字符串值 "R0","R1"..."R7" 集合中提取 int 值。

标签: c++ pointers casting dereference


【解决方案1】:

感谢您的回答,我决定操纵名称,因此如果存储 R5,我会撕掉 R,将 5 存储在 int 中,然后可以将其用作偏移量以访问 @ 之类的值987654321@,像这样:

int val = (token.value[1]-ASCII);// ASCII is 48 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2021-05-10
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多