Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » erklärung für deklaration

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 ]
000
14.02.2005, 20:24 Uhr
~decrypt
Gast


hallo ich hab ein paar probleme mit der genauen vorstellung von folgender deklaration.
also stellt euch vor ich lege an:

int a[10];
is logo -mir ist klar es ist ein array mit 10 integer elementen (a ist referenz auf a[0])

int* a[10];
auch noch ok! ich lege ein array aus pointern auf ints an.aber...

int (*a)[10];
was nun? wie soll ich mir das vorstellen? was ist (*a) ?

würd mir sehr helfen wenn ihr mir das erklären könntet (also so das ichs mir vorstellen kann)
schon mal danke
decrypt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.02.2005, 23:04 Uhr
enno-tyrant
Frag nicht!



Zitat von ~decrypt:
...int a[10];...a ist referenz auf a[0]


->'a' ist ein Zeiger auf das erste element (vergleichbar mit '&a[0]')
--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.02.2005, 23:11 Uhr
enno-tyrant
Frag nicht!



Zitat von ~decrypt:
...int (*a)[10];
was nun? wie soll ich mir das vorstellen? was ist (*a) ?...


gute frage - nie gesehen. in welchem code/funktion etc. pp wurde das benutzt?
--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.02.2005, 00:19 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von ~decrypt:

int (*a)[10];
was nun? wie soll ich mir das vorstellen? was ist (*a) ?



Naja steht doch da: (*a) ist ein Array von 10 ints, also ist a ein Zeiger auf ein Array von 10 ints:

C++:
int x[10];
int (*a)[10];
a = &x;



Beachte, daß "int* a[10]" und "int (*a)[10]" unterschiedliche Sachen sind: ohne die Klammern wird das "*" an das int "gebunden", so daß "int* a[10]" ein Array von 10 Int zeigern ist. Dagegen bewirken die Klammern bei "int (*a)[10]", daß das "*" an a gebunden wird.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 15.02.2005 um 09:15 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.02.2005, 10:08 Uhr
~decrypt
Gast


ja das ist mir schon soweit klar gewesen das;

int* a[10];
und
int (*a)[10];
nicht dasselbe ist.

aber wenn doch bei
int a[10];
a die referenz auf auf a[10] ist (wie ich oben schon erwähnte -> zeiger = referenz)
wieso ist dann deiner meinung nach bei
int (*a)[10];
ebenfalls a der zeiger auf a[10] ???? oder hab ich dich falsch verstanden?
" also ist a ein Zeiger auf ein Array von 10 ints "

sorry hab mich noch nicht in die formatierung hineingedacht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.02.2005, 12:38 Uhr
virtual
Sexiest Bit alive
(Operator)


Nein: Zeiger != Referenz. Die Aussage von Dir habe ich überlesen und ist jedenfalls falsch. Es mag sein, daß eine Referenz von einer Implementierung intern als Zeiger realisiert wird, aber Referenzen sind was ganz anderes als Zeiger aus Programmiersicht.

C++:
int a[10]; // a ist Array
int* a;  // a ist Zeiger
int& a = ...; // a ist Referenz


All die obigen a's sind Unterschiedliche Dinge!
Wenn a ein Array ist, so kannst Du in den meisten Fällen a synonym wie einen Zeiger verwenden; genauer: a kann gleichzeitig ähnlich einem Zeiger auf das erste Element verwendet werden. Aber wenn Du mal den Ausdruck "a++" betrachtest, dann erkennst Du, daß es immer was anderes macht:
1. ist a ein Array, ist a++ nicht definiert => Compilerfehler
2. ist a ein Zeiger, zeigt a anschließend auf das nächste Element nach dem ursprünglichen a
3. ist a eine Referenz, so inkrement a++ den Inhalt von dem Wert, der referenziert wird.

Wenn man nun ein array von 10 ints hat, dann gibt es verschiedene Möglichkeiten, darauf einen Zeiger zu definieren:

C++:
int array[10];
int** a = &array;
int (*b)[10] = &array;


In beiden Fällen (a und b) kann man die Variable als einen Zeiger auf einen Zeiger auf ein int ansehen; allerdings sind das unterschiedliche typen; mithin kannst Du nicht ohne weiteres dem a das b zuweisen oder umgekehrt.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.02.2005, 13:09 Uhr
~decrypt
Gast


ok war mir sicher das referenz das gleiche wie ein pointer ist aber hab im buch nachgeschlagen und deine definition gefunden -also was dazugelernt

aber leider komme ich immer noch nicht weiter da mir das was du schreibst schon alles soweit klar ist.....
obwohl ich meine zu glauben daß a++ im ersten fall nur nicht geht da das array statisch angelegt wurde und dadurch der pointer a const ist (hat glaube ich nix mit definiert zu tun laß mich aber gerne eines besseren belehren) dynamisch würds ja gehen

am besten versuche ich es mal mit ner neuen fragestellung, angenommen ich hätte:

char a[5] = "text";
char (*b)[5] =a;

auf wieviele arten würde ich jetzt an den inhalt von a und die adresse von a[0] herankommen wenn ich nur b benutzen könnte? zb mit nem printf

danke für die mühe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.02.2005, 13:40 Uhr
Pablo
Supertux
(Operator)


es sollte


C++:
char a[5] = "text";
char (*b)[5] =&a;



sein. Auf das erste Zeichen greifst du so zu: b[0][0].

Also


C++:
#include <stdio.h>

int main() {
    char a[5] = "text";
    char (*b)[5] = &a;

    printf("Erstes Zeichen von a über b: %c\n", b[0][0]);

    return 0;
}



Ausgabe:

Code:
Erstes Zeichen von a über b: t


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

Dieser Post wurde am 15.02.2005 um 13:41 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
15.02.2005, 15:00 Uhr
~decrypt
Gast


ok schlagt mich ruhig aber ich ziehe jedes einzelne "das weiß ich schon" zurück!
entweder ich hab ein riesen brett vorm kopf oder aber C doch noch nie verstanden....

ganz langsam noch mal meine bisherigen überlegungen:

int a[10];

ist ein array mit 10 elementen (diese sind int's). a zeigt auf das erste element (also a[0]). aus jedes weitere kann ich zugreifen mit a[0+i].
soweit doch richtig oder???

int* a[10];

ist wiederum ein array das diesmal "int-pointer" als elemente hat (man kann noch spalten anlegt und ne matrix draus basteln -da zweidimensional). a zeigt wieder auf das erste element und auch a[0+i] geht.
oder??

int (*a)[10];

keine genaue ahnung!
ein array mit 10 elementen (aus int's). (*a) zeigt auf das erste element. (*a)[0+i] ist möglich. ???????????????????
aber was ist (*a) ??? doch kein (int*) oder????
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
15.02.2005, 15:05 Uhr
Pablo
Supertux
(Operator)


Frage 1: genau!

Frage 2: genau!

Frage 3: falsch.


C++:
int (*a)[10];



ist ein Pointer, der auf ein Array mit 10 Elementen zeigt.

a[0][0+i] ist praktisch äquivalent zu (*a)[0+i] und die liefern das i. Elemente des Arrays, auf das der Pointer a zeigt.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


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: