Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-12-2006, 13:48   #1
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
[C] Passare 1 filepointer x riferimento e NON valore ad 1 funzione è possibile?!

... come da titolo.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 13:56   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Matrixbob
... come da titolo.
Certo, esempio:
Codice:
void func (FILE **pf)
{
    fprintf (*pf, "Ciao");
}

int main (void)
{
    FILE *f;

    ....
    func (&f);
    ....
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 14:01   #3
AMD_GO
Senior Member
 
L'Avatar di AMD_GO
 
Iscritto dal: Jan 2006
Città: Prov.Cagliari
Messaggi: 1583
Quote:
Originariamente inviato da Antonio23
il c mette a disposizione passaggio SOLO by value, per valore.
__________________
MB: ASUS Prime x570-P - CPU: AMD Ryzen 9 3900x with Arctic Liquid Freezer II 240 - Memorie: G.Skill Ripjaws DDR4 2x16GB 3200 - HDs: Samsung 970 EVO plus and Crucial P2 1TB - Ali: Seasonic Focus GX-650 - Video: AMD Asus GTX770 Direct CU II - Concluso Positivamente con : M@x27, mirco2034, max x2, relativo, Mighty Max e tanti altri
AMD_GO è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 14:04   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Antonio23
il c mette a disposizione passaggio SOLO by value, per valore. il c++ anche il by reference.
Il "C" consente il passaggio per valore e per indirizzo (a volte indicato anche come "per riferimento").

Il C++ consente in più anche il passaggio tramite "reference". Notare che reference si traduce appunto in "riferimento" ma non ci si deve confondere. Il passaggio tramite "reference" in C++ è praticamente un passaggio per indirizzo nascosto al programmatore.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 16:18   #5
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da Antonio23
ho detto na cazzata?

Mi pare proprio di si.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 16:48   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quote:
Originariamente inviato da Antonio23
ho detto na cazzata?
No, hai detto bene.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 17:01   #7
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1451
diciamo che passando per valore l'indirizzo di una variabile, ottieni come side-effect il passaggio per riferimento.
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 17:12   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Direi di no. Altro è come passi le variabili, altro è quello che puoi fare con quelle variabili una volta che siano state passate.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 17:39   #9
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quote:
Originariamente inviato da AMD_GO
Mi stupisce che ci sia qualcuno che si stupisce. E' dai tempi degli ominidi che «In C, all function arguments are passed "by value."» (Brian "Abilis" Kernighan e Dennis "Neanderthal" Ritchie", 1.8) e «In preparing for the call to a function, the arguments are evaluated, and each parameter is assigned the value of the corresponding argument.» (ISO 9899, 6.5.2.2).

Per una volta che c'è una regola sola, dobbiamo complicarci la vita inventandocene un'altra? Ecchesiamo, masochisti?
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 21:15   #10
Furla
Senior Member
 
Iscritto dal: Feb 2004
Messaggi: 1454
anche a noi all'uni ci hanno fatto la distinzione tra passaggio per indirizzo e per riferimento.

avendo fatto informatica e sistemi al liceo la cosa mi sembrava troppo astratta e "campata per aria" ed ho chiesto dettagli su ciò che fisicamente avveniva in memoria alla fine della lezione... il prof mi ha confermato che il passaggio per riferimento è solo un passaggio per indirizzo fatto dal compilatore (un po' più comodo, nel senso che non occorre usare l'operatore di indirezione ogni volta che si vuole usare l'oggetto passato per indirizzo)

Ultima modifica di Furla : 02-12-2006 alle 21:17.
Furla è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 23:32   #11
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da PGI-Bis
Mi stupisce che ci sia qualcuno che si stupisce. E' dai tempi degli ominidi che «In C, all function arguments are passed "by value."» (Brian "Abilis" Kernighan e Dennis "Neanderthal" Ritchie", 1.8) e «In preparing for the call to a function, the arguments are evaluated, and each parameter is assigned the value of the corresponding argument.» (ISO 9899, 6.5.2.2).

Per una volta che c'è una regola sola, dobbiamo complicarci la vita inventandocene un'altra? Ecchesiamo, masochisti?
Beh allora probabilmente lo avranno scopiazzato come Micosoft il DOS se non si rivordano nemmeno il fatto che hanno inserito il "&" da utilizzare per prendere gli indirizzi e passarli alla funzione x ottenere il riferimento.
Se poi si riferiscono al fatto che non c'è la "pappa pronta" beh allora si.

CMQ il master of C è sempre ANDBIN!
Quote:
Originariamente inviato da andbin
Certo, esempio:
Codice:
void func (FILE **pf)
{
    fprintf (*pf, "Ciao");
}

int main (void)
{
    FILE *f;

    ....
    func (&f);
    ....
}
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 02-12-2006 alle 23:35.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2006, 11:49   #12
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da Antonio23
quello è cmq un passaggio per valore di un indirizzo. come già detto da pgi-bis, una cosa è come passi le variabili, un altro è il risultato che ottieni.
Niente da opinare, sta di fatto che raggiungo il mio obiettivo e senza stravolgere nulla.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2006, 18:03   #13
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Antonio23
se io passo una variabile ad una funzione, questa ne crea una copia locale e non opera su quella originale del chiamante (non è questo il passaggio per valore?)...
Esatto, proprio così.
Quando i dati vengono passati ad una funzione, vengono "pushati" sullo stack, quindi è normale che qualunque cosa passi fisicamente, è comunque una copia.

Quote:
Originariamente inviato da Antonio23
se uso un puntatore, posso passare per valore il puntatore e quindi realizzo un passaggio per indirizzo (nel senso che la funzione chiamata si crea la sua variabile locale, ma avendo passato per valore un indirizzo, la variabile locale alla funzione può operare sulla variabile originale, ma non è cmq un passaggio per valore? -anche se lo chiami per indirizzo-)
Certo, se vuoi vederla così ... anche un indirizzo è un valore. Ma non è quello che conta ... è il significato di quello che passi che conta.
Ad una funzione puoi passare:
- tipi fondamentali: per valore o per indirizzo
- strutture/union: per valore o per indirizzo
- array: solo per indirizzo
- puntatori a funzioni: solo per indirizzo, ovviamente

Quindi ci sono 2 modi passaggio. Punto.

Quote:
Originariamente inviato da Antonio23
mentre il c++, consente di passare ad una funzione un riferimento, nel senso che il cliente opera soltanto sulla variabile originale del chiamante - by reference-?
Il passaggio tramite "reference" in C++ funziona allo stesso modo del passaggio per indirizzo. Quello che viene passato fisicamente alla funzione è comunque sempre l'indirizzo della variabile. La differenza è che il linguaggio non lo tratta come un puntatore, pertanto il programmatore non può fare le operazioni tipiche dei puntatori. Come avevo già detto all'inizio è in pratica un puntatore "nascosto".
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2006, 18:53   #14
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Insisto sul fatto che ha ragione Antonio23. In C c'è solo il passaggio per valore (più esplicitamente detto per copia). In C++ c'è il passaggio per copia o per riferimento.

Passaggio per riferimento non significa che posso prendere una variabile e usare come argomento di una funzione un puntatore a quella variabile: significa che prendo quella variabile, passo quella variabile e la funziona lavora su un riferimento a quella variabile. Che per lavorare su un riferimento alla variabile usi un puntatore, un reference o delle ali di pipistrello non è pertinente al contesto del passaggio per copia o per riferimento di valori ad una funzione.
Altrimenti detto, mentre in C, data la variabile:

int x = 10;

l'unica funzione che può operare su x (non su un puntatore ad x nè sull'indirizzo di x) è:

fun(int x)

a cui x arriva nell'unica forma possibile in C, cioè per copia, in C++ data la stessa variabile:

int x = 10;

esistono due funzioni compatibili con x:

funByValue(int x)

e

funByRef(int& x)

la prima che opera su una copia di x e la seconda su un riferimento ad x. La stessa variabile x, non un puntatore a x nè l'indirizzo di x, è passabile ad entrambe le funzioni, nel primo caso per copia nel secondo per riferimento.

Dietro le quinte è usato l'indirizzo della variabile? E' una leggittima curiosità e una possibile implementazione. Potrebbe anche pigliare tutta la funzione e copiarla in-line, funzionerebbe lo stesso. Ma non è questo che conta ai fini dell'esistenza del passaggio per riferimento o per valore o per entrambi.

Naturalmente se ho detto stupidaggini sentitevi esortati a segnalarmele.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2006, 19:32   #15
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quote:
Originariamente inviato da Antonio23
quello che hai detto tu è ESATTAMENTE il modo in cui il Professore ci ha spiegato i metodi di passaggio delle variabili in C (e per differenza in C++) nel corso di Fondamenti di Informatica della Facoltà di Ingegneria...
Be', questo aumenta a tre il numero di persone che possono aver preso una cantonata: io te e il tuo professore
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2006, 11:18   #16
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Qui si vede tutta la rigidità del ingegnere.

CMQ è 1 po' come dire che il lavoro lo faccio usando la materia trasformata in energia. Ciò nonostante materia ed energia rimangono 2 cose differenti.

... e poi vi sfido a passare 1 array x valore.

IMHO ha ragione ANDBIN che è già intervenuto fin troppo x spiegarlo ed ha fatto 1 buon lavoro.
Voi invece sempre IMHO non state guardando alla pragmaticità del discorso, ma solo alla soluzione implementativa di come le cose avvengono.

Aveva detto bene anche:
Quote:
Originariamente inviato da beppegrillo
diciamo che passando per valore l'indirizzo di una variabile, ottieni come side-effect il passaggio per riferimento.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 05-12-2006 alle 11:27.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2006, 15:05   #17
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
In fin dei conti è quasi la stessa cosa, IMHO:
Codice:
#include <stdio.h>

int F1(int x)
{
  x = 5;
}

int F2(int *x)
{
  *x = 5;
}

int main()
{
  int v = 3;

  F1(v);
  printf("Valore: %d.\n", v);
  F2(&v);
  printf("Valore: %d.\n", v);
  return 0;
}
Nella seconda chiamata, ad F2, viene passata la copia... dell'indirizzo.
Stiamo lì in quanto a risultati.

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!

Ultima modifica di DanieleC88 : 05-12-2006 alle 15:07.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2006, 16:14   #18
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Non c'entra la rigidità dell'ingegnere, questa è informatica.
Quando usi l'operatore & non fai altro che ricavare l'indirizzo di una variabile,
che sarà passato per valore alla funzione - che guarda caso accetta un puntatore...

Questo non è passaggio per riferimento.

Se lo volete chiamare per riferimento fate pure,
la letteratura informatica dice tutt'altro.
Vedi anche wikipedia:
http://it.wikipedia.org/wiki/Funzion...er_riferimento
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2006, 17:22   #19
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da lovaz
Non c'entra la rigidità dell'ingegnere, questa è informatica.
Quando usi l'operatore & non fai altro che ricavare l'indirizzo di una variabile,
che sarà passato per valore alla funzione - che guarda caso accetta un puntatore...

Questo non è passaggio per riferimento.

Se lo volete chiamare per riferimento fate pure,
la letteratura informatica dice tutt'altro.
Vedi anche wikipedia:
http://it.wikipedia.org/wiki/Funzion...er_riferimento
Lascia perdere "non volete" capire e state andando pure
CMQ l'unico che mi ha aiutato realmente è solo 1, grazie.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2006, 15:53   #20
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da lovaz
Quando usi l'operatore & non fai altro che ricavare l'indirizzo di una variabile,
che sarà passato per valore alla funzione - che guarda caso accetta un puntatore...

Questo non è passaggio per riferimento.

Se lo volete chiamare per riferimento fate pure,
la letteratura informatica dice tutt'altro.
Vedi anche wikipedia:
http://it.wikipedia.org/wiki/Funzion...er_riferimento
non ho capito esattamente cosa intendi, comunque se ad una funzione che accetta come argomento un puntatore si passa l'indirizzo di x ottenuto tramite l'operatore & o un puntatore ad x è la stessa cosa, in quanto un puntatore non deferenziato contiene l'indirizzo della variabile a cui punta:
Codice:
void f(int* x)
{
printf("%d",*x);
*x=3;
printf("%d",*x);
}

int main
{
int x=5;
int *px=&x;
f(&x);
f(px);
}
..se poi non ho capito cosa intendevi chiedo scusa.
AngeL) è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Un Tesla Cybertruck per le vie di Milano...
Qualcomm Quick Charge 5+: il nuovo siste...
Google Pixel Buds A-Series a prezzo mini...
Google contro le immagini fake fatte con...
Narwal Flow sbarca su Amazon: due robot ...
Bioshock: il film di Netflix si far&agra...
Samsung 'trolla' Apple su X con la campa...
Apple Watch Series 11, Ultra 3 e SE 3 gi...
Landspace: il fallimento del lancio di u...
Windows 11 25H2: Microsoft rilascia le I...
Milano, dal 15 settembre via alle multe ...
IFA 2025: BLUETTI continua a innovare co...
Un 55 pollici 4K con Fire TV a un prezzo...
TSMC avvia la produzione interna di pell...
Come cambia la gamma iPhone con l'arrivo...
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: 09:53.


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