Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 15:48

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



(DWORD*) *(DWORD*) Frage

Discussion on (DWORD*) *(DWORD*) Frage within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Sep 2010
Posts: 454
Received Thanks: 212
(DWORD*) *(DWORD*) Frage

Könntet ihr mir bitte einmal erklären was das:
Code:
DWORD* ViTableStart;
DWORD source;
ViTableStart = (DWORD*) *(DWORD*)(source);
macht? Soweit ich das sehe ist das ein typecast. Nur warum (DWORD*) *(DWORD*)?

Wo ist der Unterschied zu:
Code:
DWORD* ViTableStart;
DWORD source;
ViTableStart = (DWORD*)source;
?
Zwawo is offline  
Old 04/30/2012, 20:32   #2
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
source wird in einen dword* gecastet und dann dereferenziert.
das dereferenzierte wird dann wieder in einen dword* gecastet.
Dr. Coxxy is offline  
Thanks
1 User
Old 04/30/2012, 20:34   #3


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,407
Du kannst natürlich auch Casts aneinanderreihen. Rein semantisch ist das da richtig, aber es würde etwas anders deutlicher werden, was es macht:

Code:
ViTableStart = (DWORD*) *(DWORD**)(source);
Du siehst, es wird erst in einen Doppelzeiger, einen Zeiger auf einen Zeiger auf ein DWORD gecastet. Danach wird dieser mithilfe des * dereferenziert, man erhält also den eigentlichen DWORD*.
Dann könnte man sich den ersten Cast sparen, da der Typ sowieso schon DWORD* ist.

Dein Beispiel castet einfach nur die DWORD Variable in einen DWORD*.

Bessere Version also:

Code:
ViTableStart = *(DWORD**)(source);
Quote:
source wird in einen dword* gecastet und dann dereferenziert.
das dereferenzierte wird dann wieder in einen dword* gecastet.
Das Dereferenzierte wäre ja ein DWORD. Würde man gleich in DWORD** casten, wäre der weitere Cast unnötig und man bräuchte nur zu dereferenzieren.
MrSm!th is offline  
Thanks
2 Users
Old 04/30/2012, 20:41   #4
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
Originally Posted by MrSm!th View Post
Das Dereferenzierte wäre ja ein DWORD. Würde man gleich in DWORD** casten, wäre der weitere Cast unnötig und man bräuchte nur zu dereferenzieren.
ich hab ja auch nur erklärt, was der code macht, nicht wie er besser wäre :P

aber mr smith hat natürlich recht mit dem DWORD** ist wesentlich einfacher lesbar und ordentlicher.
Dr. Coxxy is offline  
Reply


Similar Threads Similar Threads
void (__cdecl *)(int)' in 'DWORD
03/01/2012 - C/C++ - 10 Replies
Hey e*pvpers, Ich habe gerade mit C++ angefangen. Nun wollte ich einen Timer machen, in den man die Zeit eingibt und der dann diese Zeit abwartet(Sleep) und danach den Warnton(\a) ausgibt. Dies hier ist mein Code: #include <iostream> #include <string> #include <windows.h>
[Frage] DWORD zu CString
10/15/2011 - Flyff Private Server - 3 Replies
Hey, hab da mal eine Frage undzwar würde ich gerne eine DWORD Variable (m_pFocusItem->dwLevel) in einen CString konvertieren, habe auch schon gegoogelt, verstehe das mit sprintf() allerdings nicht so richtig >.< MFG Yakuzai.
word,dword,float...
05/04/2009 - Private Server - 0 Replies
Hi I wanted to ask what is the lenght in bytes of: word,dword,qword,float,string,ustring?



All times are GMT +1. The time now is 15:51.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.