Buongiorno a tutti, avrei una domanda da fare riguardo il valore di ritorno di una funzione:
Se una funzione ritorna un valore in quale area di memoria viene immagazzinato il valore?
grazie mille
Buongiorno a tutti, avrei una domanda da fare riguardo il valore di ritorno di una funzione:
Se una funzione ritorna un valore in quale area di memoria viene immagazzinato il valore?
grazie mille
Ultima modifica di linofex; 06-06-2015 a 10:32
per convenzione di usa il registro accumulatore o quello che prende il posto in quell'architettura. Nulla vieta di usare lo stack
Per gli Spartani e Sparta usa spartan Il mio github
Dipende dalle convenzioni di chiamata che stai utilizzando.
Le convenzioni di chiamata che stai utilizzando dipendono da tante cose, prima fra tutte l'architettura hw.
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
grazie mille per la risposta.
ho trovato questa riposta nelle slide del mio corso:
Il valore restituito (se presente) viene scambiatousando un registro del processore come variabilecondivisa. Solo che non la riesco a capire del tutto, cioè, al livello di logica mi torna ma sento di non essere sicuro.. potresti magari basandoti sulla mia riposta riformularne una nuova? grazie mille
una definizione prettamente teorica arricchita di dettagli che alla logica non servono.É anche carente di concetti eludendo le motivazioni dell'uso di un registro al posto di un altro. È ancora buono lo spunto dato nella precedente risposta
Per gli Spartani e Sparta usa spartan Il mio github
La risposta è: nei processori odierni, cioè quelli che materialmente si usano, il valore è ritornato in un registro della CPU.
Tutto il resto (uso dello stack, inesistenza di registri etc.etc.) sono tutti aspetti teorici-accademici
Grazie mille!
Avrei anche un'altra domanda che è un po' off topic, ma vista la sua banalità non credo meriti una nuova discussione (se comunque non si possono fare altre domande non fa nulla, in questo caso, metto RISOLTO e chiudo):
sempre nelle slide ho questa funzione:
void swap(int *, int *); //questa funzione scambia due valori
per chiamarla:
swap(&a,&b); //a e b due variabili assegnate;
La domanda è: il passaggio di parametri di che tipo è? leggendo nelle vostre lezioni ho dedotto che NON è per riferimento.
Nelle slide dice: l'inizializzazione dei puntatori come parametri formali avviene attraverso il passaggio di parametri per valore con la chiamata della funzione, ma non sono convinto, inquanto sempre riguardo alla vostra lezione, il passaggio sarebbe per indirizzo. Solo che la professoressa e anche nel libro viene citato solo "riferimento" e valore". Potreste chiarmi anche questo problemino? grazie
Ultima modifica di linofex; 06-06-2015 a 18:09
E' un passaggio per valore di un puntatore a intero.
&a restituisce l'indirizzo della variabile a, che viene passato per valore.
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
grazie ancora. praticamente l'indirizzo di a è il valore del puntatore a intero?
Però allora non ho capito il passaggio per indirizzo. lezione.
Ultima modifica di linofex; 06-06-2015 a 18:32