Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di baicin
    Registrato dal
    Feb 2002
    Messaggi
    29

    Urgente Array!!!!! [c++]


    Tra pochi giorni ho una prova di programmazione in c++. Non mi è chiaro il fatto che in c++ un array è sinonimo di puntatore costante al primo elemento....
    Il mio insegnante ha fatto un lungo discorso sul fatto che gli elementi di un array non si possono modificare.Ma provando a scrivere un programma che cambia in '0' tutti gli elementi di un array...mi sono reso conto che , anche se l'array è gia stato inizializzato, si possono cambiare i suoi elementi.....
    Non riesco a capire dove risiede il problema di cui parlava il mio insegnante!Tra l'altro ha introdotto l'uso della funzione copia di array per aggirare questo problema che io non ho capito in cosa consist.Aiutatemi a capire dove sta il problema ne modificare gli elementi di un array.
    Grazie!
    BACCI

  2. #2
    Che senso avrebbe utilizzare una variabile di cui non puoi cambiare il valore?
    Certo che li puoi modificare i valori di un array...

    Esempio:
    int array[3];

    Con questa istruzione ho dichiarato un array da 3 elementi (array[0], array[1], array[2]) che possono essere modificati tramite semplici operazioni di assegnazione.

    array[0]=1;
    array[1]=14;
    array[2] = array[1];

    Forse quello che voleva dire il tuo professore era che la variabile di nome array, non è una variabile, bensì una costante, contenente l'indirizzo del primo elemento del vettore.

    Non so se hai già fatto i puntatori, ma queste due scritture sono equivalenti

    Esempio:
    int *p;

    p = array;
    p = &array[0]

    Attenzione! Non puoi modificare il valore di array, utilizzando per esempio l'istruzione:

    Esempio:
    array = 0x0011cc33;

    Spero di essere stato sufficientemente chiaro... Se c'è qualcosa resto disponibile!
    Il mio Blog

    Nella vita come sul tram, quando ti siedi sei al capolinea.
    Camillo Sbarbaro

  3. #3
    Utente di HTML.it L'avatar di baicin
    Registrato dal
    Feb 2002
    Messaggi
    29

    penso di aver capito...altra cosa...altra domanda

    Grazie,penso di aver capito..!
    Un altra cosa...
    leggi:
    \\Passaggio a parametri dovrebbe stampare 5,12\\

    void func (int a, int&b)
    {int c=3;
    a=c+b;
    b=a+2;}

    void main ()
    {int x=5, y=7;
    func (x,y);
    cout<<x<<y;
    }
    \\se al posto di int&b sostituisco in tutto il codoce *b\\
    dovrebbe cambiare molto, sia per quanto riguardo la gestione delle celle nello stack sia nei valori che stampa.
    Non ho ben capito perchè...quale di questi due è passaggio per parametri..quale per valori..che differenze comportano???
    BACCI

  4. #4
    risposta alla PRIMA domanda
    codice:
    #include<iostream.h>
    
    void main(){
        char array1[14]="stringa prova", * p;
        int i;
    
        /* faccio puntatore *p al PRIMO VALORE dell' array1 */
        p=array1; 
        
        /* faccio puntatore *p all'INDIRIZZO IN MEMORIA del primo valore dell' array1 */ 
        //p=&array1[0]; 
        
        /* N.B. entrambe le assegnazioni restituiscono lo stesso OUTPUT */
    
    
        /* i 2 output saranno UGUALI in quanto sia p che array1 "puntano e quindi sono puntatori" alla stessa cosa */
        cout<<"p="<<p<<endl; // output 1
        cout<<"array1="<<array1<<endl<<endl; // output 2 
        
        /* ora invece visualizzo soltanto il primo valore della VARIABILE CHAR array1 */
        cout<<"array1[0]="<<array1[0]<<endl<<endl; // output 3
    	
        /* ciclo per tutti i singoli valori di array1, se trovo il carattere "a" lo sostituisco con "B" */  
        for(i=0;i<14;i++){
            if(array1[i]=='a') array1[i]='B';
        }
        
        /* visualizzo i valori modificati N.B. anche questa volta i 2 output saranno UGUALI */
        cout<<"p="<<p<<endl; // output 4
        cout<<"array1="<<array1<<endl<<endl; // output 5 
    }
    risposta alla SECONDA domanda
    codice:
    #include<iostream.h>
    
    void area_rettangolo1(int b, int a){
        int r=b*a; 
        cout<<"FUNC1 Risultato="<<r<<endl;
    } 
    
    int area_rettangolo2(int x, int y){
        return(x*y);
    } 
    
    void main(){
        int base=5, altezza=7;
        area_rettangolo1(base,altezza); 
        cout<<"FUNC2 Risultato="<<area_rettangolo2(base,altezza)<<endl;
    }
    Spero che questi 2 esempi possano chiarirti le idee
    ...Terrible warlords, good warlords, and an english song

  5. #5
    Osserva bene come si passano i parametri alle funzioni
    e che tipo di valore ci restituiscono:
    codice:
    #include<iostream.h>
    
    char * passa_stringa_a_stringa(char stringa[25]){//1
        return(stringa);
    } 
    
    char * passa_stringa_a_puntatore(char * c){//2
        return(c);
    } 
    
    char * passa_puntatore_a_puntatore(char * c){//3
        return(c);
    } 
    
    char * passa_puntatore_a_stringa(char stringa[25]){//4
        return(stringa);
    } 
    
    void passa_stringa_a_stringa_senza_resto(char stringa[25]){//5
        cout<<stringa<<endl;
    }
    
    void passa_puntatore_a_puntatore_senza_resto(char * p){//6
        cout<<p<<endl<<endl;
    }
    
    char passa_carattere_a_carattere(char carattere){//7
        return(carattere);
    }
    
    void passa_carattere_a_carattere_senza_resto(char carattere){//8
        cout<<carattere<<endl<<endl;
    }
    
    
    void main(){
        char * b, buffer[25]="Oriinal...Hello World!!!";
    	
    	cout<<passa_stringa_a_stringa(buffer)<<endl;//1
    	cout<<passa_stringa_a_puntatore(buffer)<<endl<<endl;//2 
       
    	b=buffer;
    
    	cout<<passa_puntatore_a_puntatore(b)<<endl;//3
    	cout<<passa_puntatore_a_stringa(b)<<endl<<endl;//4 
    	
    	passa_stringa_a_stringa_senza_resto(buffer);//5
    	passa_puntatore_a_puntatore_senza_resto(b);//6
    
    	cout<<passa_carattere_a_carattere(buffer[0])<<endl;//7
    	passa_carattere_a_carattere_senza_resto(buffer[0]);//8
    
    }
    ...Terrible warlords, good warlords, and an english song

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.