View Single Post
Old 18-01-2008, 12:03   #37
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
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
k0nt3 è offline   Rispondi citando il messaggio o parte di esso