Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zufall

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 ]
010
30.11.2005, 17:23 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Hmm, mal ne Frage. Für was ist den das sizeof(*array) ?
Ich hab es jetzt nicht versucht, aber da es ein Pointer is sollte eigentlich eine Größe (im Normallfall) von 4 rauskommen, wie lässt man dann den Compiler noch ne Anweisung übersetzen?

EDIT: *lol* 40 min und schon 2te Seite ^^
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

Dieser Post wurde am 30.11.2005 um 17:24 Uhr von J-jayz-Z editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
30.11.2005, 17:53 Uhr
predator



Jo, hast schon Recht:
sizeof(*array) (man könnte in diesem Fall auch sizeof(int) schreiben) gibt die Größe eines Elements des Arrays zurück.
sizeof(array) gibt die Größe des ganzen Arrays an.
Wenn man nun sizeof(array) durch sizeof(*array) teilt, erhält man die Anzahl der Elemente in dem Array.
AFAIK funktioniert das aber nicht bei Arrays, deren Größe erst zur Laufzeit festgelegt wird, da sizeof(array) dann nur die Größe der Adresse zurückgibt.
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
30.11.2005, 18:28 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


also sizeof(array)/sizeof(*array) == lenght(array)-1 ?
Es gibt schon komplizierte schreibweisen
Aber danke für die Auskunft !
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
30.11.2005, 18:30 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)



Zitat von predator:
AFAIK funktioniert das aber nicht bei Arrays, deren Größe erst zur Laufzeit festgelegt wird, da sizeof(array) dann nur die Größe der Adresse zurückgibt.

Geht das überhaupt ? Oder meinst du keine Arrays sondern vectoren ?
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
30.11.2005, 21:44 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von J-jayz-Z:
also sizeof(array)/sizeof(*array) == lenght(array)-1 ?
Es gibt schon komplizierte schreibweisen
Aber danke für die Auskunft !



Nein, es gilt sizeof(a)/sizeof(*a) = length(a)

Ich hätte zwar auch schreiben können sizeof(array)/sizeof(int), aber dann hätte man die Codestelle wieder anfassen müssen, wenn man den Datentypen von array verändert.

Was predator mit arrays meint, deren Größe erst zur Laufzeit feststeht, sind vermutlich Pointer. Der Ansatz geht zwar nicht für pointer, wohl aber für Arrays jeglicher art. In C Wäre etwa möglich:


C++:

int main() {
     int n;
     printf("Wie groß soll denn unser Array sein?");
     scanf("%d", &n);

     {
          int a[n];
          printf("Speicherbedarf des arrays: %d; Anzahl der Elemente im Array: %d\n",
                  sizeof(a),
                  sizeof(a)/sizeof(*a));
     }
}


--
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
015
30.11.2005, 21:54 Uhr
predator




Zitat von virtual:

C++:

int main() {
     int n;
     printf("Wie groß soll denn unser Array sein?");
     scanf("%d", &n);

     {
          int a[n];
          printf("Speicherbedarf des arrays: %d; Anzahl der Elemente im Array: %d\n",
                  sizeof(a),
                  sizeof(a)/sizeof(*a));
     }
}




Das geht?
In C++ aber nicht, oder?

PS: Ja ich meinte Pointer, weil mir keine andere Art bekannt ist/war, wie man Arrays erstellen kann, deren Größe erst zur Laufzeit feststeht.
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
30.11.2005, 22:29 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)



Zitat von predator:
PS: Ja ich meinte Pointer, weil mir keine andere Art bekannt ist/war, wie man Arrays erstellen kann, deren Größe erst zur Laufzeit feststeht.


Jetzt kennst du welche: Vectoren ! (=> www.sgi.com/tech/stl/Vector.html )
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
01.12.2005, 07:05 Uhr
virtual
Sexiest Bit alive
(Operator)


@predator
Ist ein C99 Feature, damit nicht in C++ verfügbar
--
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
018
01.12.2005, 07:33 Uhr
(un)wissender
Niveauwart


Die sollten echt mal zusehen, dass die C99-Sachen auch in C++ zum Standard gehören.
So verkehrt sind die nämlich nicht. Aber C++0x wird wohl C++09.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
01.12.2005, 16:41 Uhr
predator




Zitat von J-jayz-Z:
Jetzt kennst du welche: Vectoren ! (=> www.sgi.com/tech/stl/Vector.html )

Das kannte ich auch schon vorher; mit Array meinte ich einfach ein stinknormales C++ Array, keine Containerklasse, in der mitgezählt wird, wie viele Elemente der Container hat.


Zitat von virtual:
Ist ein C99 Feature, damit nicht in C++ verfügbar

Man lernt immer was dazu Danke!
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ 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: