Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
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: 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, 14: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, 15: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, 15: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, 17: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, 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: 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 : 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: 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, 19: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, 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: 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 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: 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, 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


Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
SpaceX realizzerà uno smartphone ...
Fire TV Omni QLED, Serie 2 e Serie 4: le...
Con l'Event Horizon Telescope si sta stu...
Milano Cortina 2026, dietro le quinte de...
IA e automazione: le armi per industrial...
SpaceX sta per rimuovere il braccio di a...
Sony a ISE 2026: display, soluzioni imme...
Sony punta sull'IA: brevettati i podcast...
Logitech G Astro A50, le cuffie gaming d...
Lenovo a ISE 2026: smart collaboration, ...
GeForce RTX 5000 SUPER cancellate e RTX ...
Substack conferma violazione: esposti da...
L'IA costa caro. Oracle punta a raccogli...
OpenAI lancia Frontier: il cervello cent...
Questo robot aspirapolvere lava sempre c...
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: 02:52.


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