View Full Version : [C] Passare 1 filepointer x riferimento e NON valore ad 1 funzione è possibile?!
Matrixbob
02-12-2006, 13:48
... come da titolo. :)
... come da titolo. :)Certo, esempio:
void func (FILE **pf)
{
fprintf (*pf, "Ciao");
}
int main (void)
{
FILE *f;
....
func (&f);
....
}
il c mette a disposizione passaggio SOLO by value, per valore.
:eek: :confused: :confused: :confused: :doh:
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.
Matrixbob
02-12-2006, 16:18
ho detto na cazzata?
:mbe: :stordita:
Mi pare proprio di si.
ho detto na cazzata?
No, hai detto bene.
beppegrillo
02-12-2006, 17:01
diciamo che passando per valore l'indirizzo di una variabile, ottieni come side-effect il passaggio per riferimento.
Direi di no. Altro è come passi le variabili, altro è quello che puoi fare con quelle variabili una volta che siano state passate.
:eek: :confused: :confused: :confused: :doh:
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? :D
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)
Matrixbob
02-12-2006, 23:32
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? :D
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 :sofico: è sempre ANDBIN!
Certo, esempio:
void func (FILE **pf)
{
fprintf (*pf, "Ciao");
}
int main (void)
{
FILE *f;
....
func (&f);
....
}
Matrixbob
03-12-2006, 11:49
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.
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.
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.
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".
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.
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 :D
Matrixbob
05-12-2006, 11:18
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. :D
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:
diciamo che passando per valore l'indirizzo di una variabile, ottieni come side-effect il passaggio per riferimento.
DanieleC88
05-12-2006, 15:05
In fin dei conti è quasi la stessa cosa, IMHO:
#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. :D
Stiamo lì in quanto a risultati.
ciao ;)
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/Funzione_(informatica)#Passaggio_per_indirizzo_o_per_riferimento
Matrixbob
05-12-2006, 17:22
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/Funzione_(informatica)#Passaggio_per_indirizzo_o_per_riferimento
Lascia perdere "non volete" capire e state andando pure :ot:
CMQ l'unico che mi ha aiutato realmente è solo 1, grazie.
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/Funzione_(informatica)#Passaggio_per_indirizzo_o_per_riferimentonon 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:
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.
Matrixbob
07-12-2006, 17:10
non è rigidita, è semplicemente precisione... :D
Non mi pare precisione, mi pare proprio rigidezza.
come quelli che credono che 1 elettrone sia solo 1 particella e basta.
Intendo dire che a una funzione C devi passare un valore, che sia
di una variabile o di un puntatore poco importa.
Se avesse passaggio per riferimento tu passeresti una variabile così
come è, e potresti modificarla dall'interno della funzione, cosa che
non puoi fare in C, in cui al limite passi un puntatore - che non viene modificato!
- con cui accedi al contenuto della variabile.
Bisogna rendersi conto che con C (o assembler) si fa tutto quello
che si può fare con un computer, ma questo non vuol dire, ad esempio,
che il C e l'assembler sono linguaggi ad oggetti, o funzionali, eccetera.
Non mi pare precisione, mi pare proprio rigidezza.
come quelli che credono che 1 elettrone sia solo 1 particella e basta.
Bah, non mi sembra rigidezza. Quello che ha detto Antonio (ed il suo prof.) sono concetti fondamentali non detti tanto per dire ma perchè evidenziano delle differenze strutturali del linguaggio C col C++.
Se poi puoi ottenere la stessa identica cosa passando come argomento il valore di un puntatore o un riferimento questo è un altro discorso.
Il passaggio per riferimento in C++ "penso" sia stato inserito per rendere il codice più pulito.
int foo(int &a)
{
a++;
}
int main(void)
{
int x=5;
foo(x);
printf("%i",x);
return 1;
}
E' sicuramente più pulito e leggibile di
int foo(int *a)
{
(*a)++;
}
int main(void)
{
int x=5;
int *px=&x;
foo(&x);
printf("%i",*px);
return 1;
}
Il simbolo & messo tra il tipo e la variabile nell'argomento di una funzione ha poi un diverso significato che "ritorna l'indirizzo del puntatore"
^TiGeRShArK^
24-12-2006, 14:01
Non mi pare precisione, mi pare proprio rigidezza.
come quelli che credono che 1 elettrone sia solo 1 particella e basta.
:mbe:
cioè scusa...
mi verresti a dire ke l'elettrone non è una particella? :mbe:
I mattoni fondamentali della materia sono quark, leptoni, muoni e qualke altro bell'esemplare di cui ora mi sfugge il nome.
L'elettrone è un leptone quindi è una particella elementare..
a meno ke tu non abbia trovato il modo di riscrivere la fisica quantistica :D
...cmq siamo lievemente OT mi sa :stordita:
Tornando in topic invece la questione è ke semplicemente confondo sempre C con C++ perkè all'univ utilizzavamo la parte base del C++ x scrivere programmi simil C....:fagiano:
Quindi la domanda sorge spontanea....
ma in C esiste l'operatore & o no? :fagiano:
mi sento tanto niubbo a fare 'ste domande :asd:
^TiGeRShArK^
24-12-2006, 14:05
Bah, non mi sembra rigidezza. Quello che ha detto Antonio (ed il suo prof.) sono concetti fondamentali non detti tanto per dire ma perchè evidenziano delle differenze strutturali del linguaggio C col C++.
Se poi puoi ottenere la stessa identica cosa passando come argomento il valore di un puntatore o un riferimento questo è un altro discorso.
Il passaggio per riferimento in C++ "penso" sia stato inserito per rendere il codice più pulito.
int foo(int &a)
{
a++;
}
int main(void)
{
int x=5;
foo(x);
printf("%i",x);
return 1;
}
E' sicuramente più pulito e leggibile di
int foo(int *a)
{
(*a)++;
}
int main(void)
{
int x=5;
int *px=&x;
foo(&x);
printf("%i",*px);
return 1;
}
Il simbolo & messo tra il tipo e la variabile nell'argomento di una funzione ha poi un diverso significato che "ritorna l'indirizzo del puntatore"
Ok, ora ho capito la differenza :D
Scusate, mi iscrivo al thread non perchè abbia molto da aggiungere ma perchè sono curioso ed interessato.
Matrixbob
24-12-2006, 16:39
:mbe:
cioè scusa...
mi verresti a dire ke l'elettrone non è una particella? :mbe:
Si comporta come tale, ma si comporta anche come 1 onda, ma probabilmente si comporta anche come qualcos'altro e quindi probabilmente non è ne uno ne l'altro.
Infatti Thompson padre e feglio hanno vinto il nobel per aver dimostrato 1 cosa e l'altra.
I mattoni fondamentali della materia sono quark, leptoni, muoni e qualke altro bell'esemplare di cui ora mi sfugge il nome.
L'elettrone è un leptone quindi è una particella elementare..
a meno ke tu non abbia trovato il modo di riscrivere la fisica quantistica :D
Mi sa che tu parli senza avere bene in mente la questione completa della Fisica e le varie sue intepretazioni.
Probabilmente hai letto qualcosa qua e la o visto qualche trasmissione televisiva o fatto qualche corso universitario dove si studia senza capire. In questo caso dubito abbiano parlato del Sig. De Broglie e di quelli vennero dopo lui.
Benchè il nome quantistica indichi il quanto come radice della parola la fisica quantistica è fondata sulla statistica e sulle onde di probabilità.
Inoltre per conludere c'è diversità nel dire "è" oppure "si comporta come", quindi prima fatti 1 panoramica completa e poi torniamo a parlarne se vuoi.
^TiGeRShArK^
24-12-2006, 23:34
Si comporta come tale, ma si comporta anche come 1 onda, ma probabilmente si comporta anche come qualcos'altro e quindi probabilmente non è ne uno ne l'altro.
Infatti Thompson padre e feglio hanno vinto il nobel per aver dimostrato 1 cosa e l'altra.
Mi sa che tu parli senza avere bene in mente la questione completa della Fisica e le varie sue intepretazioni.
Probabilmente hai letto qualcosa qua e la o visto qualche trasmissione televisiva o fatto qualche corso universitario dove si studia senza capire. In questo caso dubito abbiano parlato del Sig. De Broglie e di quelli vennero dopo lui.
Benchè il nome quantistica indichi il quanto come radice della parola la fisica quantistica è fondata sulla statistica e sulle onde di probabilità.
Inoltre per conludere c'è diversità nel dire "è" oppure "si comporta come", quindi prima fatti 1 panoramica completa e poi torniamo a parlarne se vuoi.
ah ok...
meno male ke ci sei tu ke mi illumini :asd:
E' ovvio ke le particelle hanno una natura duale, ma ciò non toglie ke l'elettrone E' una particella.
I leptoni sono delle particelle.
I quark idem.
Ke poi le particelle abbiano una natura duale non inficia minimamente il loro essere particelle.
E' come dire ke la materia non è fatta di materia in quanto a livello atomico e subatomico ha una natura duale :mbe:
certo..non sono laureato in fisica...
ma ti assicuro ke ben + di qualcosina ne capisco in questo campo.
Se proprio non ti fidi di me ti rimando alla definizione ufficiale di Wikipedia (e non solo, dato ke credo sia l'UNICA definizione ufficiale) dell'elettrone:
http://it.wikipedia.org/wiki/Elettrone
L'elettrone è una particella subatomica.
niente male come incipit ;)
e la prossima volta evita di fare supposizioni su quello ke può sapere o meno una persona su un certo argomento se non hai indizi al riguardo ;)
jappilas
25-12-2006, 13:18
Non c'entra la rigidità dell'ingegnere, questa è informatica.che mi risulta essere una scienza esatta :)
Quando usi l'operatore & non fai altro che ricavare l'indirizzo di una variabile,esattamente, infatti è il primo dei possibili significati di umpersand (&):
è l' operatore "address of" quando a secondo membro (destro) di un' assegnazione (*)
è l' operatore reference (dichiaratore di reference a, cioè alias di, un altra variabile) quando a primo membro (sinistro)
* :assegnazione che - per come la spiegarono a me, ma in effetti così banale che non dovrei essere io a ricordarlo - può essere sia esplicita che implicita, mantenendo però la forma espressione A = espressione B:
una chiamata di funzione definita dal suo prototipo return_type function( type [ |&|*] argument...), quando chiamata con function( value ...),
genera un numero di assegnazioni implicite ( [ |&|*] argument[i] = value[i] ) pari all' arità della funzione stessa: credo che basti considerare questo per dirimere molti dei dubbi , in quanto si continua ad applicare le stesse regole della stesura del codice interno a un metodo
se un parametro di una funzione è un puntatore, nella chiamata dovrà essere un "qualcosa" risolvibile ad "address of" qualcos' altro, e nel corpo della funzione il puntatore andrà dereferenziato
se un parametro è dichiarato come reference (alias) , la funzione lavorera su una copia della variabile effettiva, che dovrà essere usata per la chiamata (e non un suo puntatore)
non vedo la difficoltà...
......pregherei di smorzare i toni e non andare OT per una questione di orgoglio personale... è Natale :O ;)
MixMar: non ti scusare ;)
Matrixbob
26-12-2006, 15:37
ti consiglio di documentarti prima di cambiare la fisica del novecento.
l'elettrone è una PARTICELLA SUBATOMICA che mostra un comportamento ONDULATORIO e CORPUSCOLARE, a seconda del fenomeno che stai osservando. In fisica quantistica è inutile ragionare su che cosa qualcosa è, ma cosa rappresenta quando l'osservi, in quanto, osservandola, fai collassare il sistema.
Sai perchè si parla di onde di probabilità e statistica? perchè non vale l'approccio deterministico, ovvero perchè le deduzioni si fanno in base all'osservazione del fenomeno da un punto di vista statistico, non puoi parlare di cosa è, ma solo di come si comporta.
Guarda ho passato + che molto bene 1 serie di esami di fisica, ma non sono qui x discorrere su questo.
Piuttosto citatemi dove erro o sono ambiguo e invece di citare a memoria o a lettura manuali o libri tecnici di fisica come l'Halliday o addirittura Wikipedia che il + delle volte è quantitativo più che qualitativo.
La fisica insegnata/imparata così è come citare dei dogmi a memoria e basta.
Come dare alla domanda:
"che cosa è la forza"
La riposta:
"massa per accelerazione" (ovvimante nel loro contesto vettoriale o meno)
Beh la fisica NON è solo così, e x fortuna chi non ha 1 limite prefissato così rigido ed inflessibile lo sa.
Matrixbob
26-12-2006, 15:43
che mi risulta essere una scienza esatta :)
Ecco quando si fa questa affermazione a cosa si fa riferimento?
Al fatto dei problemi P o NP?
Ai linguaggi di programmazione Turing completi?!
O sul fatto che essendo nata dalla matematica deve per forza essere esatta?!
^TiGeRShArK^
26-12-2006, 15:53
Guarda ho passato + che molto bene 1 serie di esami di fisica, ma non sono qui x discorrere su questo.
Piuttosto citatemi dove erro o sono ambiguo e invece di citare a memoria o a lettura manuali o libri tecnici di fisica come l'Halliday o addirittura Wikipedia che il + delle volte è quantitativo più che qualitativo.
La fisica insegnata/imparata così è come citare dei dogmi a memoria e basta.
Come dare alla domanda:
"che cosa è la forza"
La riposta:
"massa per accelerazione" (ovvimante nel loro contesto vettoriale o meno)
Beh la fisica NON è solo così, e x fortuna chi non ha 1 limite prefissato così rigido ed inflessibile lo sa.
:mbe:
a parte ke io la fisica non la imparo ma la capisco dato ke x me oltre agli esami dati ai tempi dell'univ è anke una passione....
Ma spiegaci dove sbagliamo noi a dire ke l'elettone è una particella subatomica.
Tu hai solo detto ke l'elettrone ha un comportamento duale, cosa su cui noi x altro siamo perfettamente d'accordo.....ma non hai affatto spiegato xkè NON dovrebbe essere una particella subatomica.
Matrixbob
26-12-2006, 16:04
:mbe:
a parte ke io la fisica non la imparo ma la capisco dato ke x me oltre agli esami dati ai tempi dell'univ è anke una passione....
Ma spiegaci dove sbagliamo noi a dire ke l'elettone è una particella subatomica.
Tu hai solo detto ke l'elettrone ha un comportamento duale, cosa su cui noi x altro siamo perfettamente d'accordo.....ma non hai affatto spiegato xkè NON dovrebbe essere una particella subatomica.
Ecco 1 punto, questo:
NON dovrebbe essere una particella subatomica.
NON lo ho proprio mai detto da nessuna parte, la prima volta che compare scritto è perchè lo hai scritto tu.
Inoltre il discorso è nato dalla rigidezza di vedre le cose, come molti anche bravi, scienziati fecero.
Alcuni non credevano che ad 1 qualsiasi particella potesse essere associata 1 sorta di lunghezza d'onda.
Beh alla fin della fiera dovettero ricredersi.
Quello che sottolineo io è che noi capiamo il fenomeno e lo descriviamo con 1 modello.
Questo NON significa che il fenomeno è quella cosa, ma solo che si comporta come quella cosa.
Se poi in anni futuri si capisce che a fenomeni inerenti a quello studiato in passato possono essere associati N modelli matematici differenti allora è normale che quel fenomeno è N cose?!
Oppure è + sensato dire che probabilmente è "scematizzabile" in N cose, ma potrebbe benissimo essere nessuna di queste e queste potrebbero essere benissimo 1 "sottoinsieme" della cosa che è.
D'altronde tu sapresti dirmi con precisione che cos'è:
1 onda elettromagnetica?!
Già adesso mi butto in 1 predizione, la tua sarà 1 risposta tecnica.
^TiGeRShArK^
26-12-2006, 19:27
Ecco 1 punto, questo:
NON dovrebbe essere una particella subatomica.
NON lo ho proprio mai detto da nessuna parte, la prima volta che compare scritto è perchè lo hai scritto tu.
Inoltre il discorso è nato dalla rigidezza di vedre le cose, come molti anche bravi, scienziati fecero.
Alcuni non credevano che ad 1 qualsiasi particella potesse essere associata 1 sorta di lunghezza d'onda.
Beh alla fin della fiera dovettero ricredersi.
Quello che sottolineo io è che noi capiamo il fenomeno e lo descriviamo con 1 modello.
Questo NON significa che il fenomeno è quella cosa, ma solo che si comporta come quella cosa.
Se poi in anni futuri si capisce che a fenomeni inerenti a quello studiato in passato possono essere associati N modelli matematici differenti allora è normale che quel fenomeno è N cose?!
Oppure è + sensato dire che probabilmente è "scematizzabile" in N cose, ma potrebbe benissimo essere nessuna di queste e queste potrebbero essere benissimo 1 "sottoinsieme" della cosa che è.
D'altronde tu sapresti dirmi con precisione che cos'è:
1 onda elettromagnetica?!
Già adesso mi butto in 1 predizione, la tua sarà 1 risposta tecnica.
un onda elettromagnetica è essenzialmente energia ke si propaga nello spazio.
E questo non è un modello, è esattamente quello ke è.
I modelli sono quelli ad esempio ricavabili dalle equazioni di maxwell ke descrivono le onde in funzioni del campo elettrico e magnetico.
Ma ciò non toglie ke le onde elttromagnetiche sono energia ke si propaga, come non cambia il fatto ke l'elettrone è una particella.
Ke poi ci sono vari modelli ke descrivono la natura duale delle particelle in base a degli effetti ke vengono osservati, non cambia la definizione stessa di elettrone come particella ;)
Non siete un pelino off topic? :O
Matrixbob
27-12-2006, 10:54
Non siete un pelino off topic? :O
Si hai ragione infatti io la chiudo qui, cmq potevi chiuderlo anche tmp addietro, mi aveva già risposto all'inizio Andbin in maniera efficiente ed esaustiva.
nico88desmo
27-12-2006, 19:27
mi intrometto nella discussione e faccio una domanda;
siccome vado male a porla, faccio un esempio;
dunque:
devo gestire una pila e per ogni "cella" contiene:
- una stringa di 80 caratteri;
- puntatore alla cella successiva;
questo è il codice:
#include <stdio.h>
#include <math.h>
#include <malloc.h>
struct caratteri {
char riga[80];
struct caratteri *suc;
};
typedef struct caratteri Tcar;
int leggifile (Tcar **);
int StrToInt (char *, int);
void Mypush (Tcar **, char *);
void output(Tcar **, int);
void Mypop (Tcar ***, char *);
char retLettera (char);
char pausa;
int main(int argc, char *argv[]) {
Tcar *iniz;
int n;
iniz = NULL;
n = leggifile(&iniz);
output(&iniz, n);
return 0;
}
int leggifile (Tcar **iniz) {
FILE *fp;
int nr=0, i=0, n, cont=0;
char c;
char num[4];
char app[80];
Tcar *prec;
prec = NULL;
fp = fopen("input.txt","r");
do {
n = fread(&c, sizeof(char), 1, fp);
if (c!='\n') {
num[i]=c;
i++;
}
} while (c!='\n');
nr = StrToInt(num, i);
while (cont < nr) {
i=0;
do {
n = fread(&c, sizeof(char), 1, fp);
app[i] = c;
i++;
} while ( (c!='\n') && (i<80) && (feof(fp)==0) );
if (i<80) {
app[i-1]='\n';
}
Mypush(&prec, app);
if (*iniz==NULL) {
*iniz = prec;
}
cont++;
}
fclose(fp);
return nr;
}
int StrToInt (char *c, int l) {
int i, j;
int num = 0;
i = l-1;
j = 0;
while (i>=0) {
num = num + ((c[i]-0x30)*pow(10,j));
j++;
i--;
}
return num;
}
void Mypush (Tcar **prec, char *s) {
Tcar *n;
n = (Tcar *) malloc (sizeof(Tcar));
strcpy(n->riga, s);
n->suc = NULL;
if (*prec==NULL) {
*prec = n;
} else {
(*prec)->suc = n;
*prec = n;
}
}
void Mypop (Tcar ***prec, char *s) {
Tcar *app;
if (**prec != NULL) {
strcpy(s, (**prec)->riga);
app = **prec;
**prec = (**prec)->suc;
free(app);
}
}
La mia domanda è la seguente;
se quando passo a leggifile l'indirizzo del primo puntatore, poi quando successivamente all'interno di leggifile stesso scrivo:
Mypush(&prec, app);
che indirizzo gli viene passato a MyPush??
un'altra cosa meno importante anzi, è più una mia curiosità:
è buono il codice in sè come è scritto?
grazie a tutti!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.