Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

1

27.04.2006, 11:47

C++ (Pointer)

hallo leute!

ich hab ein paar fragen an euch bezüglich pointern in C++

hab mir ein paar sachen diesbezüglich durchgelesen, im großen und ganzen alles verstanden bis auf ein paar dinge:

1) Frage:


ich deklariere 4 Variablen und 1 Pointer:

C-/C++-Quelltext

1
2
3
4
int iZahl1 = 1, iZahl2 = 2;
double dZahl = 3.1;
float fZahl = 4.1f
void *universal;


wenn ich nun die adresse von Zahl2 (int) an den univeresllen Pointer (universal) zuweise, funktioniert das einwandfrei:

C-/C++-Quelltext

1
universal = &iZahl2;


das gleiche gilt wenn ich die adresse von Zahl3 (double) zuweise:

C-/C++-Quelltext

1
universal = &dZahl;


aber folgendes funkioniert nicht mehr:


C-/C++-Quelltext

1
2
3
universal = &iZahl2;
//...

Zahl1 = (*universal) //warum geht das hier nicht?


universal hat ja nun eine adresse eines int-wertes bekommen, warum kann ich dann einer anderen int-variable die adresse von *universal nicht mehr zuweisen? (sollte das ein universeller pointer nicht können)

es geht nur dann wenn der pointer als interger-pointer deklariert wurde..



2) Frage:

wozu verwendet man eigentlich pointer? was ist daran einfacher, besser oder schneller? ich verstehe nicht so ganz wo und wozu man pointer nun wirklich verwendet.. und warum gibt es eigentlich die möglichkeit verschiedene pointer verschiedener typen zu deklarieren (int, double usw.) wenn man doch die möglichkeit hat einen universellen pointer zu deklarieren (void *universellerPointer)?




vielen danke für die leute die sich zeit nehmen um auf diese noobige fragen zu antworten :rolleyes:



;p
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

27.04.2006, 12:19

Du musst den Pointer erst nach int* casten, danach kannst du ihn referenzieren. Da siehst du auch direkt den Grund, warum void*-Pointer eigentlich nicht sehr gut sind. Sie bieten keinerlei Typensicherheit und können daher leicht zu Fehlerquellen werden.

3

27.04.2006, 13:42

Hey

1.)

C-/C++-Quelltext

1
2
3
universal = &iZahl2;
//...

Zahl1 = (int)(*universal)    // Das müsste funzen


2.) Mann kann sie verschiedener Typen deklarieren damit du sie nicht wie bei deinem 1. Problem nicht casten musst.
Pointer sind sehr nützlich! aber kein muss, es geht auch sehr gut ohne - ich nutze sie gerne. Warum? tja, ähm... ich schätze weil sie angenehm flexibel bei der Speichernutzung sind.

mfg Markus

john

Alter Hase

Beiträge: 786

Beruf: Schüler

  • Private Nachricht senden

4

27.04.2006, 13:46

Ja, zu zweitens noch einmal zur Vedrdeutlichung:
Es geht im Allgemeinen um Speicher und Dynamik, die du durch Pointer erhältst.
mfg
john

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

27.04.2006, 14:17

Zitat von »"lannms11"«

Hey

1.)

C-/C++-Quelltext

1
2
3
universal = &iZahl2;
//...

Zahl1 = (int)(*universal)    // Das müsste funzen


2.) Mann kann sie verschiedener Typen deklarieren damit du sie nicht wie bei deinem 1. Problem nicht casten musst.
Pointer sind sehr nützlich! aber kein muss, es geht auch sehr gut ohne - ich nutze sie gerne. Warum? tja, ähm... ich schätze weil sie angenehm flexibel bei der Speichernutzung sind.

mfg Markus

Nein, das geht nicht.
Es müsste so lauten:

C-/C++-Quelltext

1
Zahl1 = *((int*)universal);

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

6

27.04.2006, 16:13

Ich meine mich an sowas wie

C-/C++-Quelltext

1
reinterpret_cast<typename>(Variable)
zu erinnern, was sicher lesbarer als *((int*)Variable) ist :)
weiß aber grad nicht, ob das schon so geht oder was da genau zurück gegeben wird.

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

7

27.04.2006, 20:05

@grek40
Hast schon recht... würde dann so ausschauen

C-/C++-Quelltext

1
Zahl1  = *(reinterpret_cast<int*>(universal));
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

8

28.04.2006, 10:25

thx :)

danke leute.. es funktioniert so

C-/C++-Quelltext

1
Zahl1 = *((int*)universal);


hoffe ich nerve jetzt nicht mit der folgenden frage ^^ :

aber warum muss ich den pointer casten?

:angel:
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

28.04.2006, 11:50

Weil man void*-Zeiger nicht dereferenzieren kann.

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

10

28.04.2006, 11:56

mhm danke danke david :)

ich finde das cool mit dem autor zu reden, dessen buch ich gerade durchkaue.. oder ... naja.. sagen wir so.. für dessen buch ich mir die benötigten grundkenntnisse gerade aneigne :D


will mir evtl. noch jemand erklären welchen unterschied diese 2 anweisungen machen:

C-/C++-Quelltext

1
2
3
4
5
6
/
//das 

Zahl1  = *(reinterpret_cast<int*>(uni)); 
//und das

Zahl1  = *(static_cast<int*>(uni));
//geht, aber wo ist der unterschied?
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Werbeanzeige