Newsgroup: it.comp.lang.c++
Titolo: Chiamata per riferimento con argomento di tipo puntatore VS chiamata per valore

Ho scritto questi 2 programmi di ordinamento
#include <iostream>
#include <cstdlib>
#include <ctime>
void bubblesort ( int[], int);
int main () {
    srand ( time ( NULL));
    const int arraysize = 32000;
    int vett[arraysize];
    for ( int i = 1; i <= arraysize; i++ ) {
        vett[i] = 1 + rand() % 32000;
        cout << vett[i]<<" ";
        if ( i % 10 == 0 )
        cout << endl<<endl; }
    bubblesort (vett, arraysize);
    system ("PAUSE");
    return 0; }
void bubblesort ( int vettore [], const int lunghezza ) {
     for ( int i = 0; i < lunghezza - 1; i++ )
         for ( int j = 0; j < lunghezza - 1; j++ )
             if ( vettore[j] > vettore[j + 1] ) {
             int hold = vettore[j];
             vettore[j] = vettore[j+1];
             vettore[j + 1] = hold; }
     for ( int i = 0; i < lunghezza - 1; i++ ) {
         cout << vettore[i]<<" ";
         if ( i % 10 == 0 )
         cout << endl<<endl; }
     }
e:
#include <iostream>
#include <cstdlib>
#include <ctime>
void bubblesort ( int[], int);
int main () {
    srand ( time ( NULL));
    const int arraysize = 32000;
    int vett[arraysize];
    for ( int i = 1; i <= arraysize; i++ ) {
        vett[i] = 1 + rand() % arraysize;
        cout << vett[i]<<" ";
        if ( i % 10 == 0 )
        cout << endl<<endl; }
    bubblesort (vett, arraysize);
    system ("PAUSE");
    return 0; }
void bubblesort ( int vettore [], const int lunghezza ) {
void swap ( int *, int *);
     for ( int i = 0; i < lunghezza - 1; i++ )
         for ( int j = 0; j < lunghezza - 1; j++ )
             if ( vettore[j] > vettore[j + 1] )
             swap ( &vettore[j], &vettore[j+1] );
     for ( int i = 0; i < lunghezza - 1; i++ ) {
         cout << vettore[i]<<" ";
         if ( i % 10 == 0 )
         cout << endl<<endl; }
     }
void swap ( int *point1, int *point2 ) {
int hold = *point1;
*point1 = *point2;
*point2 = hold; }
molto simili:
non fanno altro che ordinare un array di valori generati casualmente.
La differenza č che nel primo uso la chiamata per valore per ordinare
l'array, nel secondo i puntatori
ma non dovrebbe essere piů efficiente il secondo?
In termini di peso, occupano lo stesso, e inoltre, eseguendoli, entrambi per
ordinare gli array impiegano quasi 120 secondi o meno, ma piů di 100.
Non dovrebbe il secondo impiegarci molto meno tempo del primo?
Grazie, Freddy

 Non dovrebbe il secondo impiegarci molto meno tempo del primo?
Non vedo perchè. Per impiegarci di meno deve eseguire meno istruzioni.
Per come è scritto ne esegue di più (la chiamata e il ritorno dalla
funzione nel primo non ci sono).
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556


Non sto passando argomenti di tipo puntatori, e quindi solo indirizzi di
memoria anzicchè intere variabili?
Quindi il secondo non dovrebbe essere lo stesso più veloce?
Freddy

 memoria anzicchč intere variabili?
No, in pratica fai la stessa cosa. Quando passi un'array ad una funzione, in
pratica passi il puntatore al suo primo elemento (prova a fare all'interno
della funzione un sizeof(vettore) e te ne accorgi), quindi le due cose sono
quasi equivalenti, solo che nel secondo caso c'č anche la chiamata a
funzione, che ha un costo in piů.
Ciao,
Cecco