Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Pointer

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
29.11.2003, 17:47 Uhr
niels_ole_salscheider



Hallo,
wenn ich in C++ einer Funktion einen Pointer übergeben muss, aber nur eine normale Variable habe, mache ich das ja eigentlich mit &meine_variable.
Aber wie muss ich das machen, wenn ich nur einen Pointer auf eine Struktur habe, die die Vatiable enthält?

Danke

Ole
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.11.2003, 18:03 Uhr
derphilipder




C++:

struct s
{
    int n;//Deine Variable
    ...
}

funktion(s* ptr)
{
   ptr->n//Deine Variable
   ...
}

int main
{
   s test;

   funktion(&test);
  
      
  
}




Fehler drin...geändert.
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"

Dieser Post wurde am 29.11.2003 um 18:24 Uhr von derphilipder editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.11.2003, 18:09 Uhr
Pablo
Supertux
(Operator)


Man benutzt besser -> Operator:


C++:
void foo(struct einstruct *obj)
{
    obj->member1=etwas;
    ...
}

int main()
{
    struct einstruct p;
    foo(&p);
    if(p.member1==etwas) ....
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 29.11.2003 um 18:12 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.11.2003, 18:17 Uhr
niels_ole_salscheider



Entweder verstehe ich das jetzt nicht richtig, oder ihr meint was anderes als ich...

Ich hab' eine fertige Funktion (z.B. GetClientRect) der ich einen Zeiger übergeben muss (z.B. &rect).

Normalerweise hätte ich z.B. den Code:

C++:
RECT rect;
GetClientRect(hwnd, &rect);



Aber ich hab' jetzt erst mal eine Struktur mit einer Variablen RECT:

C++:
struct struktur
{
RECT rect;
}



Und dann einen Pointer auf die Struktur also:

C++:
struktur *StrPointer;



Wie muss ich jetzt damit die Funktion aufrufen? GetClientRect(hwnd, &StrPointer->rect); geht nicht...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.11.2003, 18:29 Uhr
0xdeadbeef
Gott
(Operator)



C++:
GetClientRect(&StrPointer->rect);


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
29.11.2003, 18:29 Uhr
Pablo
Supertux
(Operator)


Ich weiß nicht, ob GetClientRect(hwnd, &StrPointer->rect); so funktioniert. Mach dann folgendes:

C++:
#include <iostream>
struct RECT
{
    int x;
    int y;
};
struct A
{
   RECT xy;
};

void foo(RECT *rect)
{
    rect->x=rect->y=10;
}

int main()
{
    A myA;
    myA.xy.x=myA.xy.y=20;
    foo(&myA.xy);
    std::cout << myA.xy.x << " " << myA.xy.y << std::endl;
    std::cout << &myA << " " << &myA.xy << std::endl;
    return 0;
}



Bei mir funktioniert es, und beide Adressen &myA und &myA.xy sind gleich. Ich weiß aber nicht, ob das was ich gemacht habe richtig ist. Auf jeden Fall hat es so funktioniert, aber wie gesagt, könnte es Zufall sein, dass es funktioniert.


Bearbeitung von Supertux:

Ich hab gemerkt, dass @beefy schon geantwortet hat. Aber ich hab noch ne Frage: Wie funktioniert es bei den Structs? Haben die Members eine eigene Adresse? Oder ist die Adresse gleich? Wieso funktioniert mein Programm? Und wie könnte ich nur auf die Adresse des Memebers zugreifen, falls die Memebrs eine unterschiedliche Adresse haben?


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 29.11.2003 um 18:31 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
29.11.2003, 18:32 Uhr
derphilipder



In der Tat - falsch verstanden!

Versuch mal
GetClientRect(hwnd, &(StrPointer->rect));

Adressoperator hat eine höhere Vorangstufe!
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"

Dieser Post wurde am 29.11.2003 um 18:36 Uhr von derphilipder editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
29.11.2003, 18:33 Uhr
niels_ole_salscheider




Zitat:
A myA;

Hab' ja leider nur A *myA;
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
29.11.2003, 18:35 Uhr
Pablo
Supertux
(Operator)



Zitat:
derphilipder postete
In der Tat - falsch verstanden!

Versuch mal
GetClientRect(hwnd, &(*StrPointer->rect));

Adressoperator hat eine höhere Vorangstufe!


Ich hab das so geändert und hab keinen Unterschied in der Adresse gemerkt!
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.11.2003, 18:36 Uhr
niels_ole_salscheider



Versuch mal
GetClientRect(hwnd, &(*StrPointer->rect);

Da sagt der: error C2100: Zeigeroperation ungültig
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: