int arrays zusammenaddieren



  • hi,

    irgendwie stehe ich gerade aufm schlauch, kann mir einer erklären weshalb bei dieser funktion:

    int main()
    {
    	int array[]={2,5,8,9,7,4,5,7,8,9,10,11,15};
    
    	for(int i=0;i<=sizeof(array[i]);i++)
    	cout << array[i] << endl;
    	return 0;
    }
    

    nachfolgendes die programmausgabe ist:

    2
    5
    8
    9
    7

    eigentlich sollen hier die werte im array addiert werden, erzeigt mir aber nur die ersten 5 an, wieso?

    ein dank für eure zeit 😋



  • enno-tyrant schrieb:

    hi,

    irgendwie stehe ich gerade aufm schlauch, kann mir einer erklären weshalb bei dieser funktion:

    int main()
    {
    	int array[]={2,5,8,9,7,4,5,7,8,9,10,11,15};
    
    	for(int i=0;i<=sizeof(array[i]);i++)
    	cout << array[i] << endl;
    	return 0;
    }
    

    nachfolgendes die programmausgabe ist:

    2
    5
    8
    9
    7

    eigentlich sollen hier die werte im array addiert werden, erzeigt mir aber nur die ersten 5 an, wieso?

    ein dank für eure zeit 😋

    soll das so:

    sizeof(array[i])
    

    mit dem [i]?



  • nunja, wenn ich:

    for(int i=0;i<=sizeof(array);i++)
    

    wirds ganz schlimm, auch bei:

    for(int i=0;i<=sizeof(array[0]);i++)
    

    wirds nicht besser.

    was habe ich vergessen? 😕



  • Ich weiß zwar nicht was da addiert wird, aber egal. Das geht so nicht:

    for(int i=0;i<=sizeof(array[i]);i++)
    

    , da array in wirklichkeit vom Typ

    int*
    

    und array[i] vom Typ

    int
    

    sind.(Mal ganz davon abgesehen das die Schleife sowieso falsch ist...) So ginge es z.B.:

    int main() 
    { 
        int array[]={2,5,8,9,7,4,5,7,8,9,10,11,15}; 
        int size=13;
    
        for(int i=0;i<size;++i) 
        cout << array[i] << endl; 
        return 0; 
    };
    

    Oder, einfacher:

    #include <vector>
    int main()
    {
        std::vector<int> v;
        for(unsigned i=0;i<15;++i)
            v.push_back(i);
        unsigned size=v.size();    //Die ändert sich ja nicht
        for(unsigned i=0;i<size;++i)
            std::cout<<v[i];
    };
    

    :xmas1: :xmas2:



  • enno-tyrant schrieb:

    nunja, wenn ich:

    for(int i=0;i<=sizeof(array);i++)
    

    wirds ganz schlimm, auch bei:

    for(int i=0;i<=sizeof(array[0]);i++)
    

    wirds nicht besser.

    was habe ich vergessen? 😕

    Hmm, wie wärs mit ...

    schreib doch mal ein prog:

    cout << sizeof(array) << endl;
    cout << sizeof(array[0]) << endl; // ??
    cout << sizeof(array) / sizeof(int) << endl;

    gibts nicht was wie array.length oder length(array)?



  • ein dank an euch, da die felder immer dynamisch sin sollten war das die bedingung für die schleife die ich suchte:

    for(int i=0;i<=(sizeof(array) / sizeof(int))-1;i++)
    

    ich vergaß einfach: " / sizeof(int))-1"

    nochmals danke an euch 👍



  • Und das funktioniert?
    Kann ich mir nicht so recht vorstellen...



  • #include <iostream>
    using std::cout;
    using std::endl;
    
    int main()
    {
    	//initialisierung der felder
    	int array[]={2,5,8,9,7,4,5,7,8,9,10,11,14}, result=0;
    
    	//ausgabe der felder
    	for(int i=0;i<=(sizeof(array) / sizeof(int))-1;i++){
    	cout << array[i] << endl;
    
    	//zusammenaddieren der feldelemente
    	result += array[i];};
    
    	//ausgabe des ergebnisses
    	cout << "\nAlle Felder zusammen addiert ergibt: " << result;
    	return 0;
    }
    


  • ness schrieb:

    Und das funktioniert?
    Kann ich mir nicht so recht vorstellen...

    Klar, array ist ja ein Speicherbereich mit einem Zeiger drauf. Deshalb size(array) / size(element)



  • Aber müsste sizeof(array) nicht sizeof(int*) zurückgeben?



  • mein_compiler schrieb:

    main.cpp:12: warning: comparison between signed and unsigned integer

    kann man aber scheinbar ignorieren



  • enno-tyrant schrieb:

    mein_compiler schrieb:

    main.cpp:12: warning: comparison between signed and unsigned integer

    kann man aber scheinbar ignorieren

    klar, eine Größe ist immer positiv.

    for (unsigned int i = 0; i < size....)
    

    würde das Problem lösen



  • Microsoft schrieb:

    The sizeof operator is often used to calculate the number of elements in an array using an expression of the form:

    sizeof array / sizeof array[0]



  • 😃 👍



  • OK, habt gewonnen, auch wenn das meinem Verständnis widerspricht...



  • ness schrieb:

    OK, habt gewonnen, auch wenn das meinem Verständnis widerspricht...

    Array != Zeiger
    auch wenn ein Array sich oft wie ein Zeiger verhält.

    schau dir da mal den Unterschied an... Gibt im C Forum sicher eine Menge Threads dazu. Ansonsten kannst du ja nen eigenen Thread aufmachen wo wir dir die Unterschiede erklären können 😉


Anmelden zum Antworten