2017-10-08 4 views
-1
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" 

문제는 내가 다른 이름을 저장하는 가치라는 문자열의 회원을 가지고 있으며, 구조체를 가지고있다 int 형 포인터의 이름 난에서 int 형 포인터의 이름을하려고 할 때 문자열을 다시 포인터를 참조하고 값을 역 참조하는 방법을 알아낼 수 없습니다.문자열 값은

위의 예 에서처럼 문자열 val을 내 구조체에서 "R0"으로 가져온 다음 int * RO에 액세스하는 데이 구조체를 사용하면 성공하지 못했습니다.

+0

실행할 수 없습니다. 기호는 런타임에 사용할 수 없습니다. – user0042

+0

이런 종류의 경우에는 [std :: map ] (http://en.cppreference.com/w/cpp/container/map)을 사용하고 싶을 것입니다. – Galik

+0

'int valInR0 = * reinterpret_cast (& token.value)'이것은 의미가 없습니다. 컴파일러 오류를 숨기기 위해 캐스트와 포인터를 사용하지 마십시오. 당신의 대답'int val = (token.value [1] -ASCII)'도 잘못 될 수 있습니다. 어쩌면'string value' 대신'int value'를 선언하는 것일 수도 있습니다. –

답변

0

답변을 주셔서 감사합니다. 이름을 조작 한 것이므로 R5가 저장되면 R을 저장하고 int를 5로 저장 한 다음 오프셋과 같이 값에 액세스 할 수 있습니다. *(reg+5), 이렇게 :

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