Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » C++ Anfängerproblem » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 6 Beiträge
as_string

Zitat:
Original von eulerscheZahl
So funktioniert es wieder: int* ptr2 = &zahlen[0];

Genau! Das ist auch die Schreibweise, die ich generell empfehlen würde, auch wenn sie vielleicht etwas umständlich erscheint, weil man ja das "&" und das "[0]" einfach weg lassen könnte. Trotzdem wird so ganz explizit gemacht, was ein Array und was ein Zeiger ist, wenn auch C das nicht selbst wirklich unterscheidet.

Wichtig in diesem Beispiel ist auch noch, dass der Zeiger in der for-Schleife inkrementiert wird. Das ist nämlich gar nicht so ganz trivial, weil es schon Zeiger-Arithmetik ist: Der Compiler Zählt die in ptr2 gespeicherte Adresse nicht einfach um den Wert eins hoch, sondern um genau so viele, wie der Typ, auf den der Zeiger zeigt, definiert ist. Wenn es also ein int-Zeiger ist (also mit int* deklariert wurde), dann wird die Adresse um sizeof(int) erhöht. Das ist wichtig, damit der Zeiger im nächsten Schleifendurchlauf dann auch wirklich auf den nächsten Integer-Wert zeigt.

Gruß
Marco
Karlito

Nur eine Anmerkung:
ich empfehle bei C und C++ immer den Stern an die Variable zu schreiben. C und C++ sind leider ein wenig unintuitiv was die deklaration von Pointern angeht. Deklariert man
code:
1:
2:
3:
int* x,y;

so ist leider entgegen der Intuition nur x ein int-Pointer. Das wird mit der Schreibweise
code:
1:
2:
3:
int *x,y;

besser klar.

Gruß,

Karlito
eulerscheZahl

Gut aufgepasst, es gibt sogar einen Fehler: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive] int* ptr2 = zahlen[0];
So funktioniert es wieder: int* ptr2 = &zahlen[0];
as_string

Zitat:
Original von eulerscheZahl
Wenn du mit einem Zeiger auf ein Array zeigen lässt, ist das das selbe, wie wenn du auf den ersten Wert des Arrays zeigst.

int* ptr2 = zahlen entspricht also int* ptr2 = zahlen[0]

Da muss ich leider widersprechen! Der Zeiger nimmt bei ersterem die Adresse des ersten Elements von zahlen auf (zeigt also auf dieses Element). Mit *ptr2 kann dann auf den Wert zugegriffen werden, auf den ptr2 zeigt, und das ist dann der selbe Wert wie zahlen[0]. Man könnte sogar ptr2[0] verwenden, oder auch *zahlen, das ist dann prinzipiell äquivalent, wenn auch nicht besonders gut lesbar dann.
Das zweite Beispiel würde wohl beim Kompilieren normalerweise eine Warnung nach sich ziehen: Du weißt dabei den ersten Wert des Arrays einem Zeiger zu. In C geht das prinzipiell zwar schon, da ein Zeiger i. A. gleich groß oder größer ist, als ein Integer. Aber das ist normalerweise nicht besonders sinnvoll und nicht gewollt.

Letztlich ist ein Array in C nicht so unterschiedlich zu einem Zeiger und beides kann als jeweils das andere normalerweise auch verwendet werden. Man kann auch sagen: Die Array-Variable ist eigentlich ein Zeiger auf das erste Element des Arrays, nur die Initialisierung führt im vorliegenden Fall dazu, dass auch noch Speicher auf dem Stack reserviert wird und die Werte dort einer nach dem anderen abgelegt werden.

Gruß
Marco
eulerscheZahl

Das ? sollte wohl ein * werden.
Wenn du mit einem Zeiger auf ein Array zeigen lässt, ist das das selbe, wie wenn du auf den ersten Wert des Arrays zeigst.

int* ptr2 = zahlen entspricht also int* ptr2 = zahlen[0]
dan C++ Anfängerproblem

Meine Frage:
In meiner Einführungsveranstaltung für Informatik sollen wir in einer Übung die Werte angeben, die Variablen an verschiedenen Stellen annehmen. Das Programm sieht wie folgt aus:

#include <iostream >
using namespace std ;
int main (){
const int anzahlZahlen = 4;
int zahlen [ anzahlZahlen ] = { 4, 3, 42, 2};
int ? ptr1 = zahlen ;
const int pivot = zahlen [0];
for ( int ? ptr2 = zahlen ; ptr2 != zahlen+anzahlZahlen ; ++ptr2 ){
(...)
Mein Problem ist, zu bestimmen, für welchen Wert "zahlen" steht. Es wird in diesem Programm offenbar als eine Variable benutzt, allerdings ist "zahlen" doch ein Array-> int zahlen [ anzahlZahlen ] = { 4, 3, 42, 2};.





Meine Ideen:
Ich verstehe nicht, wie ein array in diesem Zusammenhang genutzt werden kann, da ich für *prtr2 in diesem: -> for ( int ? ptr2 = zahlen,...) Zusammenhang ja mehrere Zahlen angeben würde, was sinnfrei wäre.