Passaggio puntatore array a funzione.

di il
5 risposte

Passaggio puntatore array a funzione.

Mi spiegate perchè questo codice è errato (per comodità metto solo i punti salienti del main e della function):
#include <iostream>
using namespace std;
void function (int *A, int dim);
main(){
int *A;
*allocazione dinamica e scrittura array a*
function(a, dim)
........
}


void function (int *A, int dim){
int *b;
*allocazione dinamica e scrittura array b*
a=b;
}
Quando vado a stampare l'array a nel main dopo il richiamo della function, mi viene un array assurdo, perché? Dov'è l'errore?
Ps: per rimediare ho creato un tipo arr che è un puntatore di interi (typedef int *arr), dichiarando a e b come tipi arr e non puntatori ad int, ed ho cambiato l'header della function in "void function (arr &a, int dim)", ma mi sembra un modo troppo astroso e macchinoso di risolvere il problema :/

5 Risposte

  • Re: Passaggio puntatore array a funzione.

    Inanzitutto per modificare un array con una funzione devi passare il suo puntatore, altrimenti le modifiche rimangono solo all'interno della funzione
  • Re: Passaggio puntatore array a funzione.

    Mi spiego meglio :

    Sia *a un puntatore

    Se lo passi tramite valore alla funzione f (int *a) modifichi il contenuto ma non il puntatore

    Se invece lo passi alla funzione f (int **a) oppure f (int &a) modifichi il puntatore stesso
  • Re: Passaggio puntatore array a funzione.

    ale99 ha scritto:


    Inanzitutto per modificare un array con una funzione devi passare il suo puntatore
    Ciao,
    in effetti il nome di un array è un puntatore all'array stesso.

    Per chiarire meglio posto un piccolo esempio di come si possa passare un array (in questo caso di interi) a una funzione affinché questa lo modifichi:
    
    #include <stdio.h>
    #include <stdlib.h>
    
    void azzeraArray(int * array, int size)
    {
        int i=0;
        for(i=0; i<size; i++) array[i] = 0;
    }
    
    void stampaArray(int * array, int size)
    {
        int i=0;
        for(i=0; i<size; i++) printf("Array[%d] = %d\n", i, array[i]);
    }
    
    int main()
    {
        int size = 10;
        int myArray[size];
        int i=0;
        for(i=0; i<size; i++) myArray[i] = 1;
        printf("\nArray originale:\n");
        stampaArray(myArray, size);
        azzeraArray(myArray, size);
        printf("\nDopo la modifica:\n");
        stampaArray(myArray, size);
    
        return 0;
    }
    
    
  • Re: Passaggio puntatore array a funzione.

    Ciao,
    in effetti il nome di un array è un puntatore all'array stesso.
    Si, ma nella funzione non puoi modificare a stesso

    Così puoi modificare solo l'area puntata
  • Re: Passaggio puntatore array a funzione.

    ale99 ha scritto:


    Si, ma nella funzione non puoi modificare a stesso

    Così puoi modificare solo l'area puntata
    Ah certo, io intendevo che si può modificare l'array, mentre tu parlavi di modificare dove punta il puntatore.
    Perfetto. Lascio comunque l'esempio, nel caso possa essere utile a qualcuno.
Devi accedere o registrarti per scrivere nel forum
5 risposte