Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Frage zur Berechnung der Anzahl der Elemente vom int array

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 <
000
18.07.2015, 17:04 Uhr
hanowde



Guten Tag, Alle

Ich habe eine Funktion in header Datei geschrieben um die Anzahl der Elemente auszugeben, wie folgendes:


C++:
anzahl.cpp

#include "header/anzahl.h"
  
void ausgebeIntArray(int intArr[]){
  
    //??? Dont work ???
    int anzElm = sizeof(intArr)/sizeof(intArr[0]);
  
    //int *intPoint = intArr;
  
    /*
    while(*intPoint !='\0'){
  
        anzElm++;
    }
    */

  
    //string arrayCopy = intArr;
    //int anzStrElm = arrayCopy.length();
  
    if(anzElm != 0){
  
        printf("Die Groesse vom Int-Array ist: %d", anzElm);
  
    }else{
  
        printf("Leerer Array \n");
    }
}    




Dann im Main-Programm die Funktion mit einem int-Array als Parameter aufrufen wie folgendes:

uebung01.cpp


C++:
C++:
#include "header/anzahl.h"
int intArrayx[] = {3, 5, 7, 9, 12};
  
ausgebeIntArray(intArrayx);    




Warum bekomme ich 2?


Danke sehr

Dieser Post wurde am 18.07.2015 um 17:19 Uhr von hanowde editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.07.2015, 17:40 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

das ist das übliche Problem: sizeof wird zur Compilezeit, nicht zur Laufzeit ausgewertet.

Warum du nun genau 2 bekommst, kann ich dir jetzt auch nicht sagen, das scheint dein compiler wohl so zu machen.

Normalerweise übergibt man dann einfach als weiteren Parameter die Größe des Arrays (schließlich sollte man diese wissen an der Stelle an der man dieses anlegt).

C++ Lösung dazu wäre einen std::vector o.ä zu verwenden, dort kann man mit .size() die größe abfragen.
--
class God : public ChuckNorris { };

Dieser Post wurde am 18.07.2015 um 17:41 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.07.2015, 08:24 Uhr
Tommix



'Morgen

Zitat von FloSoft:

Warum du nun genau 2 bekommst, kann ich dir jetzt auch nicht sagen...


aber ich
Ein Array als Parameter wird implizit in einen Zeiger auf das erste Element gecastet. Und

C++:
sizeof(int*)/sizeof(int)


ist auf dem Zielsystem (64 bit?) offenbar 2.

Gruß,
Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: