Click here to Skip to main content
15,886,873 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralRe: [Challenge/Puzzle] Implement reinterpret_cast Pin
Matthew Faithfull11-Mar-13 23:40
Matthew Faithfull11-Mar-13 23:40 
GeneralRe: [Challenge/Puzzle] Implement reinterpret_cast Pin
MicroVirus13-Mar-13 11:12
MicroVirus13-Mar-13 11:12 
GeneralRe: [Challenge/Puzzle] Implement reinterpret_cast Pin
Matthew Faithfull13-Mar-13 11:18
Matthew Faithfull13-Mar-13 11:18 
GeneralRe: [Challenge/Puzzle] Implement reinterpret_cast Pin
MicroVirus13-Mar-13 11:29
MicroVirus13-Mar-13 11:29 
GeneralRe: [Challenge/Puzzle] Implement reinterpret_cast Pin
Stefan_Lang11-Mar-13 3:29
Stefan_Lang11-Mar-13 3:29 
GeneralRe: [Challenge/Puzzle] Implement reinterpret_cast Pin
harold aptroot11-Mar-13 9:03
harold aptroot11-Mar-13 9:03 
GeneralRe: [Challenge/Puzzle] Implement reinterpret_cast Pin
Stefan_Lang11-Mar-13 22:30
Stefan_Lang11-Mar-13 22:30 
GeneralRe: [Challenge/Puzzle] Implement reinterpret_cast Pin
Stefan_Lang12-Mar-13 0:09
Stefan_Lang12-Mar-13 0:09 
The following code compiles and it does return the correct values:
C++
int* f1(int i) { return 0; }
int* f2(int* pi) { return pi; }
union UPointers {
   int*(*ag1[2])(int i);
   struct SPointers {
      int*(*g1)(int i);
      int*(*g2)(int* pi);
   } my_spointers;
} my_pointers;
int* foo(int i) {
   int* (*h1)(int i);
   my_pointers.my_spointers.g1 = &f1;
   my_pointers.my_spointers.g2 = &f2;
   h1 = my_pointers.ag1[1];
   return h1(i);
}
int _tmain(int argc, _TCHAR* argv[])
{
   for (int i = 12; i < 15; ++i) {
      int* pi = foo(i);
      std::cout << i << ' ' << pi << std::endl;
   }
   return 0;
}

The output is:
12 0000000C
13 0000000D
14 0000000E


The idea is to abuse a function pointer that is supposed to pass an int argument by assigning it to a function that expects an int*. I'm almost sure there is no implicit conversion involved, but I'm not too familiar with function pointers to be sure.

The 'conversion' happens when the function call writes the int argument to the stack, but the function that is called interprets it as a int*.
GeneralRe: [Challenge/Puzzle] Implement reinterpret_cast Pin
MicroVirus13-Mar-13 11:19
MicroVirus13-Mar-13 11:19 
GeneralRe: [Challenge/Puzzle] Implement reinterpret_cast Pin
Stefan_Lang13-Mar-13 23:07
Stefan_Lang13-Mar-13 23:07 
Questiontinyxml Pin
venkatesh528678-Mar-13 16:43
venkatesh528678-Mar-13 16:43 
AnswerRe: tinyxml Pin
Richard MacCutchan8-Mar-13 21:48
mveRichard MacCutchan8-Mar-13 21:48 
AnswerRe: tinyxml Pin
Albert Holguin10-Mar-13 14:39
professionalAlbert Holguin10-Mar-13 14:39 
QuestionInsert is working but Select from this music site is not! Pin
Ericdick8-Mar-13 1:48
Ericdick8-Mar-13 1:48 
GeneralRe: Insert is working but Select from this music site is not! Pin
Jochen Arndt8-Mar-13 1:54
professionalJochen Arndt8-Mar-13 1:54 
QuestionHow can i put Install button in my mfc property sheet Pin
venkatesh528677-Mar-13 3:28
venkatesh528677-Mar-13 3:28 
AnswerRe: How can i put Install button in my mfc property sheet Pin
Richard MacCutchan7-Mar-13 3:34
mveRichard MacCutchan7-Mar-13 3:34 
QuestionRe: How can i put Install button in my mfc property sheet Pin
David Crow7-Mar-13 7:47
David Crow7-Mar-13 7:47 
QuestionJSON Parser Pin
john56326-Mar-13 23:20
john56326-Mar-13 23:20 
AnswerRe: JSON Parser Pin
CPallini7-Mar-13 0:17
mveCPallini7-Mar-13 0:17 
QuestionRe: JSON Parser Pin
David Crow7-Mar-13 3:00
David Crow7-Mar-13 3:00 
Questionrsa decryption using gmp Pin
etesi6-Mar-13 14:51
etesi6-Mar-13 14:51 
AnswerRe: rsa decryption using gmp Pin
Richard MacCutchan6-Mar-13 22:26
mveRichard MacCutchan6-Mar-13 22:26 
GeneralRe: rsa decryption using gmp Pin
parths7-Mar-13 22:38
parths7-Mar-13 22:38 
AnswerRe: rsa decryption using gmp Pin
parths7-Mar-13 22:42
parths7-Mar-13 22:42 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.