C: Bubblesort

Diskussionen zu Tutorials, Änderungs- und Erweiterungswünsche
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C: Bubblesort

Beitrag von Xin » Mi Sep 17, 2008 12:57 pm

Dirty Oerti hat geschrieben:Die Übergabe per ANZ ist zwar nicht unbedingt die schönste/normalste/etc...
Deswegen möchte sie eigentlich vermeiden.

Arrays sollten (nahezu) grundsätzlich nicht als ValueType übergeben werden.
Dirty Oerti hat geschrieben:Wobei die Frage ist, ob man nicht ein gewisses Grundwissen in einem Artikel über Bubblesort verlangen kann...
Darf man. Der Artikel steht im hinteren Bereich des Tutorials.

Allerdings sollte man sich über die Kosten von Übergabeparametern vielleicht mal deutlicher auslassen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: C: Bubblesort

Beitrag von Dirty Oerti » Mi Sep 17, 2008 1:00 pm

Xin hat geschrieben:
Dirty Oerti hat geschrieben:Die Übergabe per ANZ ist zwar nicht unbedingt die schönste/normalste/etc...
Deswegen möchte sie eigentlich vermeiden.

Arrays sollten (nahezu) grundsätzlich nicht als ValueType übergeben werden.
Ja, ich weiß. Nur für einen Anfänger wäre Übergabe per ANZ evtl verständlicher.

Xin hat geschrieben:
Dirty Oerti hat geschrieben:Wobei die Frage ist, ob man nicht ein gewisses Grundwissen in einem Artikel über Bubblesort verlangen kann...
Darf man. Der Artikel steht im hinteren Bereich des Tutorials.

Allerdings sollte man sich über die Kosten von Übergabeparametern vielleicht mal deutlicher auslassen.
Ok, vllcht sollten wir an den Anfang der "Fortgeschrittenen" Kapitel einen Hinweis setzen, dass bestimmte Grundkenntnisse erforderlich sind.

Über die Kosten von Übergabeparametern sollte wirklich mal was geschrieben werden.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: C: Bubblesort

Beitrag von fat-lobyte » Mi Sep 17, 2008 1:18 pm

Xin hat geschrieben:Arrays sollten (nahezu) grundsätzlich nicht als ValueType übergeben werden.
:shock: Wird das etwa by Value übergeben??? Also das ganze array auf den Stack kopiert, und wenns eine nicht const variable ist dann nochmal in die lokale Variable???
Erscheint mir schon seltsam. Ich dachte, arr[ANZ] sei nur eine Empfehlung, ein "Alias" für *arr.
Haters gonna hate, potatoes gonna potate.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: C: Bubblesort

Beitrag von nufan » Mi Sep 17, 2008 1:22 pm

Der Feldname ohne die Indexklammern ist auch nur die Adresse des 1. Feldelementes. Wenn man es dann mit

Code: Alles auswählen

bubblesort (feld);   //ohne []!
übergibt, wird ja die Adresse übergeben. Also nicht viel anderes als ein Pointer.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: C: Bubblesort

Beitrag von Dirty Oerti » Mi Sep 17, 2008 1:28 pm

fat-lobyte hat geschrieben:
Xin hat geschrieben:Arrays sollten (nahezu) grundsätzlich nicht als ValueType übergeben werden.
:shock: Wird das etwa by Value übergeben??? Also das ganze array auf den Stack kopiert, und wenns eine nicht const variable ist dann nochmal in die lokale Variable???
Erscheint mir schon seltsam. Ich dachte, arr[ANZ] sei nur eine Empfehlung, ein "Alias" für *arr.
Meines Wissens nach übergibt

Code: Alles auswählen

unsinnige_funktion(unsinnigesArray[5]);
per Value...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: C: Bubblesort

Beitrag von fat-lobyte » Mi Sep 17, 2008 1:32 pm

Dirty Oerti hat geschrieben:Meines Wissens nach übergibt

Code: Alles auswählen

unsinnige_funktion(unsinnigesArray[5]);
per Value...
Ja klar. Da übergibst du ja auch nur ein Element des Arrays. Nicht das ganze Array.

Ich hab das grade nachgerprüft. Da wird trotzdem nur der Zeiger übergeben. Wer mir nicht glaubt, hier ist der Code:

Code: Alles auswählen

const unsigned ANZ = 5;

void foo(int arr[ANZ])
{
        unsigned i;

        for (i =0; i < ANZ; i++)
        ;
}

int main()
{
        int arr[ANZ];
        foo(arr);

        return 0;
}
und hier der Disassembly

Code: Alles auswählen

(gdb) disassemble main
Dump of assembler code for function main:
0x08048410 <main+0>:    lea    ecx,[esp+4]
0x08048414 <main+4>:    and    esp,0xfffffff0
0x08048417 <main+7>:    push   DWORD PTR [ecx-4]
0x0804841a <main+10>:   push   ebp
0x0804841b <main+11>:   mov    ebp,esp
0x0804841d <main+13>:   push   ecx
0x0804841e <main+14>:   sub    esp,0x24
0x08048421 <main+17>:   lea    eax,[ebp-24]
0x08048424 <main+20>:   mov    DWORD PTR [esp],eax
0x08048427 <main+23>:   call   0x80483f4 <_Z3fooPi>
0x0804842c <main+28>:   mov    eax,0x0
0x08048431 <main+33>:   add    esp,0x24
0x08048434 <main+36>:   pop    ecx
0x08048435 <main+37>:   pop    ebp
0x08048436 <main+38>:   lea    esp,[ecx-4]
0x08048439 <main+41>:   ret    
0x0804843a <main+42>:   nop    
0x0804843b <main+43>:   nop    
0x0804843c <main+44>:   nop    
0x0804843d <main+45>:   nop    
0x0804843e <main+46>:   nop    
0x0804843f <main+47>:   nop    
End of assembler dump.
(gdb) disassemble foo
Dump of assembler code for function _Z3fooPi:
0x080483f4 <_Z3fooPi+0>:        push   ebp
0x080483f5 <_Z3fooPi+1>:        mov    ebp,esp
0x080483f7 <_Z3fooPi+3>:        sub    esp,0x10
0x080483fa <_Z3fooPi+6>:        mov    DWORD PTR [ebp-4],0x0
0x08048401 <_Z3fooPi+13>:       jmp    0x8048407 <_Z3fooPi+19>
0x08048403 <_Z3fooPi+15>:       add    DWORD PTR [ebp-4],0x1
0x08048407 <_Z3fooPi+19>:       cmp    DWORD PTR [ebp-4],0x4
0x0804840b <_Z3fooPi+23>:       jbe    0x8048403 <_Z3fooPi+15>
0x0804840d <_Z3fooPi+25>:       leave  
0x0804840e <_Z3fooPi+26>:       ret    
0x0804840f <_Z3fooPi+27>:       nop    
End of assembler dump.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: C: Bubblesort

Beitrag von Dirty Oerti » Mi Sep 17, 2008 1:40 pm

fat-lobyte hat geschrieben:
Dirty Oerti hat geschrieben:Meines Wissens nach übergibt

Code: Alles auswählen

unsinnige_funktion(unsinnigesArray[5]);
per Value...
Ja klar. Da übergibst du ja auch nur ein Element des Arrays. Nicht das ganze Array.

Ich hab das grade nachgerprüft. Da wird trotzdem nur der Zeiger übergeben. Wer mir nicht glaubt, hier ist der Code:
Hupps. Tschuldigung.
Hab da was verwechselt^^
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C: Bubblesort

Beitrag von Xin » Mi Sep 17, 2008 7:51 pm

fat-lobyte hat geschrieben:Ich hab das grade nachgerprüft. Da wird trotzdem nur der Zeiger übergeben. Wer mir nicht glaubt, hier ist der Code:

Code: Alles auswählen

const unsigned ANZ = 5;

void foo(int arr[ANZ])
{
        unsigned i;

        for (i =0; i < ANZ; i++)
        ;
}

int main()
{
        int arr[ANZ];
        foo(arr);

        return 0;
}
arr ist ein Zeiger auf arr[0]. Dementsprechend passt das, C/C++ ist hier widersprüchlich. Die Signatur der Funktion verlangt eigentlich eine Anzahl von ANZ ints.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: C: Bubblesort

Beitrag von nufan » Mi Sep 17, 2008 8:18 pm

Ok... und wie solls im Tutorial stehn?

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: C: Bubblesort

Beitrag von Dirty Oerti » Mi Sep 17, 2008 8:22 pm

dani93 hat geschrieben:Ok... und wie solls im Tutorial stehn?
Das ist die alles entscheidende Frage.

Ich würde es als Zeiger ins Tutorial schreiben.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Antworten