Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI aggiorna la sua linea di droni ultraleggeri con Neo 2, un quadricottero da 160 grammi che mantiene la compattezza del predecessore ma introduce una stabilizzazione meccanica a due assi, sensori omnidirezionali e un sistema LiDAR
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone
Ad Appian Europe 2025, l'azienda parla molto della sua visione di cos'è e come dovrebbe essere usata l'intelligenza artificiale: è uno strumento che va sempre adoperato dalle persone, che devono rimanere responsabili dei processi all'interno dell'azienda. Non è un giocattolo con cui sperimentare, ma un aiuto per superare le sfide di business più importanti
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-02-2004, 18:28   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
[C] Passaggio per valore o per riferimento ?

ero convinto che scrivere

int *puntatore = null;


miafunzione(puntatore);

fosse un passaggio per riferimento in quanto passo al chiamante l'indirizzo memorizzato da puntatore

mi dicono invece che è un passaggio per valore
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2004, 18:30   #2
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
Codice:
 
int *puntatore = NULL;
miafunzione(&puntatore);
Non era cosi???
Cioe & nn era indirizzo di???
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2004, 18:36   #3
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
Re: [C] Passaggio per valore o per riferimento ?

Quote:
Originariamente inviato da misterx
ero convinto che scrivere

int *puntatore = null;


miafunzione(puntatore);

fosse un passaggio per riferimento in quanto passo al chiamante l'indirizzo memorizzato da puntatore

mi dicono invece che è un passaggio per valore
tecnicamente è un passaggio per valore, solo che quel valore rappresenta un indirizzo di memoria. è come il discorso di java
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2004, 00:25   #4
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da Luc@s
Codice:
 
int *puntatore = NULL;
miafunzione(&puntatore);
Non era cosi???
Cioe & nn era indirizzo di???
se vuoi passare il puntatore come argomento devi scrivere
Codice:
miafunzione(puntatore)
e non
Codice:
miafunzione(&puntatore)
a meno che tu non voglia usare un puntatore a puntatore. se passi l'argomento nel primo modo il prototipo deve essere
Codice:
void miafuonzione (int *)
non so esattamente se passando un puntatore ad una funzione gli passi il valore o un riferimento (cmq credo il valore) fatto sta che usanto un puntatore è come se il passaggio fosse per riferimento visto che puoi tranquillamente i parametri della funzione chiamante.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2004, 03:24   #5
Joestar
Member
 
Iscritto dal: Jun 2001
Messaggi: 19
Passando un puntatore ad una funzione si passa un riferimento.

Ipotizzando infatti di passare un puntatore ad una struttura, all'interno della funzione si interagisce con quest'ultima con l'operatore freccia "->" e non con l'operatore punto "." come avverrebbe in caso di passaggio per valore.

es.

struct tag
{
char nome[20];
int eta;
};

struct tag *Ptrdati //creato un puntatore alla struttura di tipo tag

se fz è la funzione in questione il cui prototipo sia per esempio void fz(struct tag *); ecco come le passi il parametro fz(Ptrdati);

All'interno di fz per accedere al campo nome o età si deve usare Ptrdati->nome o Ptrdati->eta o in alternativa (*Ptrdati).nome o (*Ptrdati).eta in questo casosi usa il valore del puntatore.
Joestar è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2004, 04:15   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
void f(int *p); //f opera solo sull'intero (*p)

int x = 0;
f(&x);

Questo io l'ho sempre chiamato passaggio per indirizzo...

Se invece ho una situazione del genere:

void f(int *p, int size); //f opera su un vettore contenuto all'indirizzo p

int *x = new int[n];

f(x, n);

x viene passato per valore. Attenzione, non è il vettore ad essere passato per valore, ma il suo indirizzo di partenza...

Il passaggio per reiferimento in C++ è senza dubbio questo:

void f(int &p); //f opera sull'alias p

int x = 0;
f(x);

p è un alias di x...

Da notare che ai fini della traduzione in assembly, il passaggio per indirizzo e per riferimento si rappresentano allo stesso modo...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2004, 08:45   #7
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
quali sono i motivi che fanno scegliere l'una o l'altra via e cioè passaggio per valore, nel caso di java o C oppure riferimento nel caso di pascal o C++ ?

Ultima modifica di misterx : 22-02-2004 alle 09:06.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2004, 09:21   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da misterx
quali sono i motivi che fanno scegliere l'una o l'altra via e cioè passaggio per valore, nel caso di java o C
Java non fa il passaggi per valore dell'indirizzo in quel modo lì...

Java fa questo passaggio per valore:

void f(int p);

f(x);
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2004, 09:44   #9
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da cionci
Java non fa il passaggi per valore dell'indirizzo in quel modo lì...

Java fa questo passaggio per valore:

void f(int p);

f(x);

lo avevo capito cionci

per definizione l'unico modo che ha java per passare dati tra funzioni(metodi) è per valore e non per riferimento

però stavo chiedendo perchè alcuni linguaggi adottano l'uno l'altro caso
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2004, 09:57   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
C++ e Pascal possono adottare tutti i modi citati...
Java non permette il passaggio per indirizzo perchè l'implementazione dei puntatori è nascosta...

Il passaggio per riferimento non viene adottato dal C perchè appunto considerato un doppione del passaggio per indirizzo...

Il passaggio per riferimento è secondo me molto comodo e si adatta perfettamente alla gestione degli oggetti ed all'overloading degli operatori (senza passaggio per riferimento bisognerebbe ammattirci)...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone L'IA "seria" di Appian è divers...
Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
Presentato il nuovo obiettivo Laowa 35mm...
ESA ha proposto un aumento del budget da...
Piratare Battlefield 6? Davvero una pess...
Arriva Veeam Data Platform v13. Pi&ugrav...
Framework interrompe la vendita di RAM: ...
Tachyum inventa le memorie TDIMM: una nu...
Roborock Q7 TF+, il robot economico cost...
Osca rinasce: le auto dei fratelli Maser...
Hlpy, la tecnologia al servizio dell’ass...
Ericsson rilancia sul 5G Standalone: l’I...
Black Friday Amazon: arrivano i super-sc...
Seagate raggiunge 6,9 TB per piatto con ...
Samsung lancia la One Shot Challenge: co...
Dell: il passaggio da Windows 10 a Windo...
Black Friday Speaker: JBL, Bose, Sony, M...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:19.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v