Sie sind nicht angemeldet.

1

Montag, 12. Juli 2010, 21:01

C/C++ Tutorial: Zeiger

Zeiger
Hallo und herzlich Willkommen zu meinem Tutorial über Zeiger in der Sprache C/C++. Ich werde in diesem Tutorial die Code-Beispiele für beide Sprachen erklären. Zeiger sind schon ein schwereres Thema, deshalb ist es eher nicht für Einsteiger gedacht. Wenn ihr Fragen habt, dann fragt bitte.

1. Grundlagen
Was sind eigentlich Zeiger?
Zeiger sind ganz besondere Variablen. Zur Erklärung nehmen wir uns mal eine normale Integrer-Variable. Eine normale Variable besteht aus 4 Bestandteilen. Aus einem Typ. In diesem Fall Int. Aus einem Wert. Einer Speicheradresse (damit auf die richtige Variable zugegriffen werden kann). Und aus einem Bezeichner (in anderen Worten der Name). Ein Zeiger ist eine Variable, die anstatt des Wertes eine weitere Speicheradresse besitzt. Mit dieser Adresse kann man auf Daten, Variablen, Objekte und auch Programmcode zugreifen.
Aber aus dieser Erklärung kann man noch nichts lernen. Deshalb kommt jetzt die Praxis.

2. Erster Kontakt
Als erstes wollen wir mal einen Zeiger deklarieren. Bei C/C++ geschieht das auf dieser Weise.

C/C++-Quelltext

1
int *pointer;


int ist der Typ des Zeigers.
Merke!: Ein Zeiger muss den gleichen Typ haben, wie der Wert auf den er zeigt.
pointer ist der Bezeichner also der Name des Zeigers.
Aber was ist dieser Stern?
Dieses Sternchen (in Wirklichkeit Indirektionsoperator genannt) ist das Zeichen für einen Zeiger. Man muss das Sternchen zwischen den Typ und dem Bezeichner platzieren. Aber es hat sich eingebürgert, dass man das Sternchen am Anfang des Zeigers platziert.
Tipp!
Damit man zu keinen Fehlern kommt empfiehlt es sich den Zeiger auf die Konstante NULL zu setzen.D.H:

C/C++-Quelltext

1
int *pointer = NULL;


Denn wenn man den Zeiger benutzt, ohne in vorher einer Variablen zugewiesen zu haben, dann kann das zu bösen Folgen führen, denn der Zeiger verwendet dann irgendeine Speicheradresse.
Also der Syntax vom deklarieren eines Zeigers lautet allgemein so:

C/C++-Quelltext

1
Typ *Bezeichner;


3. Erstes Programm mit einem Zeiger

Als erstes zeige ich euch, wie ihr die Adresse einer Variablen an einen Zeiger übergebt. Hier ist erst mal der Code:

C/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdlib.h>
#include <stdio.h>

int main() {
	int zahl = 5;
	int *pointer = NULL;
   
	pointer =& zahl;
	
	printf("Pointer: %d\n", *pointer);
	printf("Zahl: %d\n", zahl);

	return EXIT_SUCCESS;
}



Das gleiche noch als C++ - Code:

C/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;

int main() {
	int zahl = 5;
	int *pointer = NULL;

	pointer =& zahl;

	cout << "Pointer: " << *pointer << endl;
	cout << "Zahl: " << zahl << endl;

	return 0;
}


So.
Hier wird zuerst einmal eine Integrer-Variable (zahl) mit dem Wert 5 deklariert und definiert. Danach ein Zeiger (*pointer) der gleich NULL gesetzt wird. Danach wird die Adresse übergeben.
Durch dieses „&“ Zeichen, übergibt die Integrer-Variable seine Adresse an den Zeiger. Danach wird beides ausgegeben. Wenn man den Indirektionsoperator (das Sternchen) vor den Pointer schreibt, beim ausgeben, wird der Wert, auf den der Pointer zeigt ausgegeben. Das was ich gerade erklärt habe, gilt bei normalen Variablen. Also bei allen normalen Integrer, Float, etc. Variablen. Bei Arrays ist das nochmal anders. Dazu kommen wir später.
Ihr könnt ja mal versuchen die Adresse vom Zeiger und von der Zahl auszugeben. Ich habe leider keine Ahnung wie das bei C++ geht. Nur bei C weiß ich das, aber ich glaube die Mehrheit hier will C++ lernen.

Bald gehts Weiter!

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Bakku« (13. Juli 2010, 22:44)


Flachland-Gorillas retten

2

Montag, 12. Juli 2010, 21:01

Platzhalter 1.

3

Montag, 12. Juli 2010, 21:01

Platzhalter 2.

4

Montag, 12. Juli 2010, 21:39

Nur Pointer zu erklären finde ich ein bisschen mager :(
Vielleicht greifst du das Thema Polymorphismus ein wenig auf.
Falls du das aber schon vorhattest...nimm das heir nicht ernst:D
Signatur Meine Tutorials

- [Video-Tut]OllyDbg
- [Tut]Code Protection Autoit/C/C++

DirectX9 Wissen: 100%

Autoit: 70%

C++: 66%


Für Fragen bezüglich Hacking im Sinne von Games hacken jeglicher Weise, bin ich per Pn zu erreichen


(^.^)Ich bin Ivan und freue mich dir zu helfen(^.^)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Botcoder« (12. Juli 2010, 21:41)


5

Montag, 12. Juli 2010, 21:50

Kommt drauf an, was du damit meinst. Wenn du die Vielgestaltigkeit meinst, beim benutzen von Zeigern. Das werde ich auch erklären. Oder meinst du etwas anderes. Wenn ja, mach am besten ein Beispiel.

6

Montag, 12. Juli 2010, 22:34

Wenn mans richig gut lernen will entfahle ich einem DAS Zeiger ist in Kapitel 7(kein buch)

7

Montag, 12. Juli 2010, 22:46

Das und etwas anderes:D
z.B anhand eines polymorphem Viruses!
Wobei ich nicht ganz weiss ob Wambo zustimmt :)
Signatur Meine Tutorials

- [Video-Tut]OllyDbg
- [Tut]Code Protection Autoit/C/C++

DirectX9 Wissen: 100%

Autoit: 70%

C++: 66%


Für Fragen bezüglich Hacking im Sinne von Games hacken jeglicher Weise, bin ich per Pn zu erreichen


(^.^)Ich bin Ivan und freue mich dir zu helfen(^.^)

8

Mittwoch, 14. Juli 2010, 20:56

Also ich finde das Tutorial bis jetzt recht gut^^ Ansonten bin ja eher der Bücherfan, vor allem bei komplexeren und tiefgreifenden Dingen, aber dieses Tutorial ist auch ziemlich gut :)
Ausserdem finde ich es angenehm, wenn jemand mal die Groß- und Kleinschreibung + Kommasetzung beachtet ;)
Was mir fehlt, ist eine Einweisung wofür man Pointer überhaupt braucht. Bevor ich mich an irgendein TuT setze, muss ich erstmal wissen worum's geht. Mir fehlt sonst einfach die Motivation ^^
Ausserdem solltest du später noch erklären wie man Zeiger anhand der Funktion malloc() oder dem Schlüsselwort new benutzt. Ansonsten wäre es wahrscheinlich wirklich nen bisschen mager...

Allerdings kann ich nicht ganz nachvollziehen, warum er ein Tutorial übers Virenschreiben verfassen soll 8|

Zitat

Ihr könnt ja mal versuchen die Adresse vom Zeiger und von der Zahl auszugeben. Ich habe leider keine Ahnung wie das bei C++ geht.

Pointer sind völlig normale Variablen. Deshalb kann man mit dem Operator (oder wie es auch immer heisst) "&" die Speicheradresse von jeder Variablen rauskriegen.

C/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include 
using namespace std;

int main() {
int zahl = 5;
int *pointer = NULL;

pointer = &zahl;

cout << "Pointer: " << *pointer << endl;
cout << "Zahl: " << zahl << endl;
cout << "Adresse vom Pointer: " << &pointer << endl;
cout << "Adresse von der Zahl: " << &zahl << endl;
return 0;
}

mfg @night@
Signatur "Um im Internet zu surfen brauch man eine IP. Einen IQ leider nicht..."
-Woki

Ich gebe niemanden eine positive Bewertung, der darum bettelt! :pinch:

GUI-Tutorial: Klick!

9

Donnerstag, 15. Juli 2010, 14:14

Danke, für deine Anregungen, und dein Lob^^.
Natürlich geht das Tutorial noch weiter.
Das mit der Einleitung ist eine gute Idee. Das könnte ich noch hier reinschreiben.