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

1

12.01.2012, 21:19

Wieso funktionerit "sizeof(array)" nicht, wenn man einen array an eine Funktion übergibt?

Hi Leute,
eigentlich dürfte die Frage aus der überschrift klar sein.
und zwar hab ich z.B folgenden Code

Man erstellt sich in der main-funktion einen array, übergibt sie an die funktion test,
und mit sizeof(zeigerb)/sizeof (int) sollte eigentlich die Länge das Arrays 10 ergeben.
Komischerweise wird nur 1 angezeigt. Woran liegt das?

C-/C++-Quelltext

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

void test(int *zeigerb)
{
        cout<<sizeof (zeigerb)/sizeof (int)<<endl;
}
int main ()
{
    int zeigera[10]={1,2,3,4,5,121,12,4,3,57};
test (zeigera);
return 0;
}

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

12.01.2012, 21:21

Weil sizeof den Datentyp prüft. Der Datentyp ist aber int*.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

12.01.2012, 21:23

Hi, danke
für die Antwort.
Kannst du mir vielleicht sage, wie ich aber trotzdem die einfach Länge des Arrays
in die Funktion bekomme?

Danke

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

12.01.2012, 21:25

Klar. Übergib sie als Parameter.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

12.01.2012, 21:30

Argh, du hast recht!
Wieso bin ich nicht gleich drauf gekommen XD
Ich sollte vielleicht länger nachdenken, bevor ich frage...

Danke nochmal

6

12.01.2012, 21:38

Noch besser: Steig von Arrays auf Vektoren um. Die kannst du Wahlweise normal, oder als Referenz übergeben, je nachdem was angemessener erscheint.
Lieber dumm fragen, als dumm bleiben!

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

12.01.2012, 22:28

Wobei Vectoren noch mehr Vorteile als die Übergabe besitzen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

8

12.01.2012, 22:33

Stimmt natürlich, der TIpp, Vektoren zu benutzen ist ein genereller und keiner nur für diese Version. Sie sind natürlich ein wenig komplexer, man muss Klassen und so verstanden haben, aber ansonsten braucht man schon richtig gute Gründe, in C++ noch normale Arrays zu benutzen (ebenso wie für C-Strings).
Lieber dumm fragen, als dumm bleiben!

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

9

13.01.2012, 07:41

Stimmt natürlich, der TIpp, Vektoren zu benutzen ist ein genereller und keiner nur für diese Version. Sie sind natürlich ein wenig komplexer, man muss Klassen und so verstanden haben, aber ansonsten braucht man schon richtig gute Gründe, in C++ noch normale Arrays zu benutzen (ebenso wie für C-Strings).

Für mich würden folgende Gründe einfallen:

- die Anzahl der Elemente im Array ist fest und die Einträge sind primitive Typen
- Schreiben von Arrays primitiver Daten in eine Datei

Hauptgrund: die Syntax ist schneller von der Hand zu schreiben und jeder weiß, was gemeint ist. Ich würde immer dann einen Vektor verwenden, wenn ich bei der Erstellung nicht weiß, wie groß die zu behandelnde Datenmenge ist.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

13.01.2012, 09:57

Garantiert Vektor nicht das selbe lineare Speicher-Feature wie Arrays? Ich dachte sowas sei im Standard festgeschrieben. Damit geht das Schreiben primitiver Daten in eine Datei also auf genau die gleiche Weise. Nicht?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige