Funzione void

di il
3 risposte

Funzione void

Salve a tutti non capisco perchè mentre la funzione void non mi modifica il valore di x nel main(come è giusto che sia) la funzione f2 me lo modifica
#include <stdio.h>
void f1(int x) {
x = x * x;
}
void f2(int y[], int n) {
int i;
for (i=0; i<n; i++) {
y[i] = y[i]*y[i];
}
}
int main(void) {
int a = 5;
int b[5] = {5,6,7,8,9};
f1(a);
f2(b,5);
printf("a = %d\n",a);
printf("b = %d\n",b[2]);
}

3 Risposte

  • Re: Funzione void

    Ti consiglio di riguardarti i vari tipi di passaggio delle variabili ad una funzione (per riferimento e per valore), così magari potresti chiarirti le idee.
  • Re: Funzione void

    Le variabili vengono passate per valore in C,ma gli array essendo nient'altro che una serie di celle in memoria con un proprio indirizzo vengono passati per riferimento.
    Per valore significa che alla funzione viene passata un copia locale del dato originario,mentre per valore significa che viene passato l'indirizzo in memoria del dato. Le variabili che memorizzano un indirizzo in memoria sono dette puntatori e devono corrispondere al tipo di dato che puntano.

    Se un array si chiama y,y non è nient'altro che un puntatore al primo elemento dell'array stesso. Però non bisogna confondere array con puntatori perché i primi sono una sequenza di dati correlati tra loro dal tipo di dato mentre i secondi sono semplici variabili che conservano un indirizzo di un'altra variabile.

    Non sono stato molto formale e rigoroso,ma spero che tu abbia capito. Sicuramente passerà qualcuno che saprà essere più rigoroso nelle definizioni.
  • Re: Funzione void

    loopunrolling ha scritto:


    Le variabili vengono passate per valore in C,ma gli array essendo nient'altro che una serie di celle in memoria con un proprio indirizzo vengono passati per riferimento.
    Per valore significa che alla funzione viene passata un copia locale del dato originario,mentre per valore significa che viene passato l'indirizzo in memoria del dato. Le variabili che memorizzano un indirizzo in memoria sono dette puntatori e devono corrispondere al tipo di dato che puntano.

    Se un array si chiama y,y non è nient'altro che un puntatore al primo elemento dell'array stesso. Però non bisogna confondere array con puntatori perché i primi sono una sequenza di dati correlati tra loro dal tipo di dato mentre i secondi sono semplici variabili che conservano un indirizzo di un'altra variabile.

    Non sono stato molto formale e rigoroso,ma spero che tu abbia capito. Sicuramente passerà qualcuno che saprà essere più rigoroso nelle definizioni.
    ho capito benissimo Grazie mille
Devi accedere o registrarti per scrivere nel forum
3 risposte