Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Con la quattordicesima generazione Lenovo ridisegna il suo ThinkPad più iconico attorno al nuovo Space Frame e ai processori Intel Core Ultra Series 3. Resta sotto 1Kg, è molto più semplice da riparare e si rivolge al professionista che lavora in mobilità, con un prezzo da prodotto di vertice.
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Le Jabra Evolve3 85 non sono semplicemente cuffie Bluetooth con cancellazione del rumore. Sono un dispositivo professionale pensato per chi trascorre gran parte della giornata in riunione, al telefono o davanti a un assistente basato sull'intelligenza artificiale
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-12-2006, 14:48   #1
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9948
[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, 14:56   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 15:01   #3
AMD_GO
Senior Member
 
L'Avatar di AMD_GO
 
Iscritto dal: Jan 2006
Città: Prov.Cagliari
Messaggi: 1590
Quote:
Originariamente inviato da Antonio23
il c mette a disposizione passaggio SOLO by value, per valore.
AMD_GO è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 15:04   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2006, 17:18   #5
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9948
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, 17: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, 18:01   #7
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1455
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, 18: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, 18: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, 22: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 22:17.
Furla è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2006, 00:32   #11
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9948
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 : 03-12-2006 alle 00:35.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2006, 12:49   #12
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9948
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, 19:03   #13
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2006, 19: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, 20: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, 12:18   #16
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9948
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 12:27.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2006, 16: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 16:07.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2006, 17: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, 18:22   #19
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9948
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, 16: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


Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Rubati 6 pallet di hardware NVIDIA da 11...
Addio ai limiti del silicio? Ecco il dia...
Windows 11 27H2 sarà un 'cambio completo...
Hai mai notato che l'iPhone sbaglia semp...
Raffreddamento a liquido e schermo perso...
TSMC valuta la produzione di 3D DRAM su ...
Il Cybertruck ha i giorni contati? Musk ...
Meta porta la voce su Muse, e a sponsori...
Perché il disco principale di Win...
Quanta acqua consuma l'IA? Da cinque goc...
Airbnb lancerà un assistente AI per pian...
25 miliardi sul tavolo: i sauditi voglio...
TV Haier QLED da 65'' a meno di 400€ su ...
Il meglio degli sconti Amazon del weeken...
Il rumore degli aerei in sottofondo può ...
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: 07:33.


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