Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Mi è sorto un dilemma. Sono convinto che questo programma stamperà sempre 0
Codice sorgente - presumibilmente C++
#include <stdio.h>
void cc (int);// prototipo
int main (void){
int i =0;// dichiaro i uguale a 0
cc(i);// invoco la funzione cc passando come argomento il valore di i
printf("%d\n", i);// stampo i (0) !
getchar();
}
void cc (int a){//copia il valore di i all'interno della variabile a
a =5;// modifico la variabile a e non la i
}
Questo programma può essere modificato come segue:
Codice sorgente - presumibilmente C++
#include <stdio.h>
void cc (int*);// prototipo
int main (void){
int i =0;// i = 0;
cc(&i);// invoco la funzione cc
printf("%d\n", i);//stampa i: 5 !
getchar();
}
void cc (int*a){// è un puntatore quindi la variabile i sarà modificata
*a =5;// possiamo tranquillamente dire che i = 5
}
Finito anche questo esempio, arriviamo al nocciolo della questione.
Codice sorgente - presumibilmente C++
#include <stdio.h>
void cc (int[]);
int main (void){
int ii;
int i[5]={0};// inizializzo un vettore di 5 elementi tutto a 0
cc(i);// chiamo la funzione e passo come argomento il vettore i
for(ii =0; ii <5; ii++){
printf("%d ", i[ii]);// mi stamperà i valore inseriti nella funzione cc ?
}
printf("\n");
getchar();
}
void cc (int a[]){
int i =0;
while(i < 5){
scanf("%d", &a[i]);// input valori
i++;
}
}
Adesso mi chiedo, è normale questo comportamento ? (vedere l'ultimo code commentato) Non è come se usassi i puntatori quando passo i vettori ? Spero di non essermi dilungato molto con gli esempi
Ultima modifica effettuata da Pitagora il 05/07/2010 alle 19:14
Hai scoperto una delle cose fondamentali del C: i vettori, in C, non esistono.
Quando passi un vettore ad una funzione, questo decade automaticamente a puntatore (non vengono copiati gli elementi, ma viene solo passato l'indirizzo di base), quindi puoi modificarne il contenuto.
Mi piace vedere che ci sei arrivato da solo, facendo esperimenti, continua così, però magari se avessi dato uno sguardo ad un libro ci C, l'avresti saputa questa cosa già dal capitolo 2...
Postato originariamente da Pitagora: Adesso mi chiedo, è normale questo comportamento ? ...
In pratica, la variabile i la puoi passare per valore e per indirizzo, il vettore solo per indirizzo.
Ma come ti ha detto TheKaneB, queste cose si studiano sui libri, altrimenti non sai neanche se sono "bug" o comportamenti leciti del linguaggio ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.