Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Dal salotto al giardino, il nuovo proiettore laser di Hisense promette esperienze cinematografiche in qualsiasi contesto: qualità d’immagine, semplicità d’uso, versatilità e prezzo competitivo il suo poker d'assi
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe
La flessibilità di configurazione è il punto di forza di questo 2-in-1, che ripropone in un form factor alternativo tutta la tipica qualità dei prodotti Lenovo della famiglia ThinkPad. Qualità costruttiva ai vertici, ottima dotazione hardware ma costo che si presenta molto elevato.
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Mentre Ubisoft vorrebbe chiedere agli utenti, all'occorrenza, di distruggere perfino le copie fisiche dei propri giochi, il movimento Stop Killing Games si sta battendo per preservare quella che l'Unione Europea ha già riconosciuto come una forma d'arte. Abbiamo avuto modo di parlare con Daniel Ondruska, portavoce dell'Iniziativa Europa volta a preservare la conservazione dei videogiochi
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


Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il c...
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart Intervista a Stop Killing Games: distruggere vid...
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
Cooler Master MasterFrame 600: modularit...
Questi case sembrano GPU RTX 50 e costan...
Elgato Facecam 4K: ecco la nuova webcam ...
Stampa 3D senza sprechi e senza rifiuti?...
OPPO Find X9 Pro potrebbe battere ogni r...
Le nuove Sony WH-1000XM6 ora disponibili...
ChatGPT Agent come un essere umano: l'AI...
Samsung rivaluta la fabbrica per il pack...
'La potenza di 16 core, nel palmo della ...
Windows 10 compie 10 anni, ma il cambiam...
Un altro Pixel 6a ha preso fuoco: la pro...
NVIDIA, ritorno in Cina in grande stile?...
Tutti contro Windows Recall: un altro se...
PlayStation FlexStrike: il sogno di un f...
WhatsApp sorprende tutti: ecco la nuova ...
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: 19:01.


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