Quote:
Originariamente inviato da mad_hhatter
si, scusami, sono stato un po' criptico
per farla breve:
JAVA:
- tipi primitivi: passaggio per valore
- oggetti: passaggio per copia del valore del riferimento (il che equivale a passare l'oggetto in sè per riferimento)
PUNTATORI in C:
il passaggio NON avviene per copia del loro valore, ma tramite indirizzamento indiretto (altrimenti la loro modifica all'interno di un metodo non avrebbe scope globale)
C:
il passaggio di un'area di memoria tramite puntatore è un passaggio per riferimento, alla stregua del passaggio di un oggetto in java. la differenza è che in C il puntatore stesso è passato per riferimento
corretto?
|
uhm no.. è molto più semplice di quello che pensi. infatti non c'è nessuna differenza di trattamento tra variabili, puntatori e oggetti (dove applicabili) in C e in Java. tutto viene passato per valore!
in java gli oggetti sono delle variabili che contengono un riferimento a un'area di memoria, quindi questo riferimento viene passato per valore. in C la cosa è equivalente con i puntatori.
per convincertene prova a eseguire questo codice:
Codice:
#include <stdio.h>
#include <stdlib.h>
void foo(int* number)
{
int* anotherNumber = (int*)malloc(sizeof(int));
(*anotherNumber) = 4;
number = anotherNumber;
}
int main(int argc, char* argv[])
{
int* number = (int*)malloc(sizeof(int));
(*number) = 1;
foo(number);
printf("\n%d\n", (*number));
return EXIT_SUCCESS;
}
stesso comportamento di java