Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL debutta in Italia con il nuovo Tensor G6, lo Zoom Pro fino a 120x, il display Super Actua da 3600 nit e la new entry HiLight riservata ai modelli Pro: lo abbiamo provato in anteprima per diversi giorni prima del lancio commerciale, tra fotocamera generativa, ricarica ancora indietro rispetto ai rivali e un prezzo che parte da 1399 euro
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti
Con un semplice dialogo in linguaggio naturale e la potenza di una scheda video di fascia alta è possibile costruire software funzionante da zero, senza scrivere una riga di codice e senza inviare un solo byte dei propri dati a server esterni
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Samsung rinnova la serie pieghevole di punta con Galaxy Z Fold8 Ultra: pannello interno da 8 pollici quasi senza piega, cerniera Flex Titanium, Snapdragon 8 Elite Gen 5 for Galaxy e batteria finalmente da 5.000 mAh. Prezzo italiano da 2.299 a 2.899 euro. Tra colorimetro, benchmark reali e giorni di uso quotidiano, ecco dove questo pieghevole convince e dove il nome Ultra fatica ancora a trovare piena giustificazione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-04-2005, 16:42   #1
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
[C] funzione calloc() per l'allocazione dinamica della memoria

Mi sono messo a studiare il C perchè prima o poi l'esame di programmazione lo dovrò dare....

Da quello che ho capito quando invoco la funzione calloc gli passo il numero di elementi di un array da allocare dinamicamente e la dimensione degli elementi che lo compongono e mi restituisce il puntatore all'inizio di tale array...capito bene?

sul manuale fà un esempio:

Funzione che restituisce un puntatore a un array allocato dinamicamente contenente 100 valori float...vabbè apparte che nell'esempio non c'è il main ma solo la funzione ci sono delle cose che non ho capito...

#include <stdlib.h>
#include <stdio.h>

float *get_mem(void){
float *p; // p è un puntatore ad un elemento di tipo float

/*Dico di allocare il vettore e metto in p l'indirizzo dell'inizio del vettore */
p=calloc(100, sizeof(float))
if(!p){
printf("Errore di allocazione\n");
exit(1);
}
return p; // Restituisci alla funzione chiamante l'indirizzo di inizio del vettore
}

La cosa che non ho capito è perchè la funzione la chiama:
float *get_mem(void)

ma che vuol dire che non riceve come argomenti alcun valore e restituisce un puntatore ad un dato di tipo float?
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2005, 17:49   #2
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da D4rkAng3l
ma che vuol dire che non riceve come argomenti alcun valore e restituisce un puntatore ad un dato di tipo float?
Cosa ci trovi di strano?
Significa che quella funzione non riceve e utilizza alcun parametro, e restituisce un puntatore a una variabile contenente dati di tipo float (che in questo caso è una array).
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2005, 21:24   #3
spedake
Senior Member
 
L'Avatar di spedake
 
Iscritto dal: Dec 2000
Messaggi: 1303
Quote:
Originariamente inviato da D4rkAng3l
Mi sono messo a studiare il C perchè prima o poi l'esame di programmazione lo dovrò dare....

Da quello che ho capito quando invoco la funzione calloc gli passo il numero di elementi di un array da allocare dinamicamente e la dimensione degli elementi che lo compongono e mi restituisce il puntatore all'inizio di tale array...capito bene?

sul manuale fà un esempio:

Funzione che restituisce un puntatore a un array allocato dinamicamente contenente 100 valori float...vabbè apparte che nell'esempio non c'è il main ma solo la funzione ci sono delle cose che non ho capito...

#include <stdlib.h>
#include <stdio.h>

float *get_mem(void){
float *p; // p è un puntatore ad un elemento di tipo float

/*Dico di allocare il vettore e metto in p l'indirizzo dell'inizio del vettore */
p=calloc(100, sizeof(float))
if(!p){
printf("Errore di allocazione\n");
exit(1);
}
return p; // Restituisci alla funzione chiamante l'indirizzo di inizio del vettore
}

La cosa che non ho capito è perchè la funzione la chiama:
float *get_mem(void)

ma che vuol dire che non riceve come argomenti alcun valore e restituisce un puntatore ad un dato di tipo float?
esatto, volendo nella definizione della funzione potresti anche omettere il void, ma hai fatto bene a metterlo, così è più leggibile...
in uscita la funzione ti ritorna un puntatore a float
__________________
Psu CM RS-850-ESBA, Asus Prime-Pro X370 (bios 5606), Ryzen 5 3800x @stock (Wraith Prism cooler), 2x8Gb Ddr4 Vengeance Lpx 3200 CL16, Zotac Gtx 1070 Amp! Core Edition, Ssd Samsung 970 Evo Plus + 2x850 evo, Hdd WD Blue 2TB, DvdRw Lg Gh22ns30, Lcd Samsung T260HD (1200p@60hz) | Win10 Pro

i7 3570k@stock, Asrock z77 Pro3 (bios 2.00), 2x2Gb G.skill Ripjaws Ddr3 1600, Sapphire R7 250 1Gb, Ssd Samsung 830, Hdd 300Gb, Win10 Pro

- Ho concluso con: Iron 10, ciufoligo, Nicola[3vil5], iSux
spedake è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2005, 16:20   #4
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
Grazie...

e se volessi mettere all'intestazione del programma il prototipo di tale funzione sarebbe sempre:

float *get_mem(void)

visto che tanto i parametri non ci sono e non devo mettere alcun tipo tra parentesi...giusto?

magari vi sembrerà stupido (cioè lo è) ma la cosa che mi aveva mandato in confusione è che in
*get_mem l'* è appiccicato al nome della funzione....

sarebbe stata la stessa cosa se avessi scritto così?:

float * get_mem(void)
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2005, 16:49   #5
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
Si il carattere '*' non può far parte del nome della funzione e quindi un prototipo del tipo
Codice:
float * fun();
è uguale
Codice:
float *fun();
Un particolare, non ti dimenticare il carattere ';' nei prototipi delle funzioni.
Un'altra piccola informazione, per sapere il numero di byte allocati ti è sufficiente moltiplicare i due parametri.
Infine non c'è nessuna differenza nella memoria allocata da queste due funzioni:
Codice:
float mem1[]=calloc(100,sizeof(float));
Codice:
float mem1[]=malloc(100*sizeof(float));
Ciao.
tglman è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship Google Pixel 11 Pro XL: fotocamera al top, batte...
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti Non sai programmare? Ecco cosa si può far...
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing" Insta360 X6: Dolby Vision, 8K e montaggio "...
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli Due settimane con Dacia Spring 2026: novit&agrav...
La missione per salvare il telescopio sp...
La stella S301 è così vici...
Chery accelera sulla robotica: Aimoga si...
Voigtländer Nokton 23mm e 35mm f/1....
Il Lunar Reconnaissance Orbiter della NA...
Prova a beffare il tribunale con un mess...
Pasticcio Freelander: usa l'immagine di ...
A New York apre la clinica del fondatore...
Control Resonant entra in fase Gold e ri...
HONOR Pad 20 Pro è ufficiale: un ottimo ...
Tesla Robotaxi sfonda dei dissuasori: il...
Call of Duty: Modern Warfare 4 presenta ...
Intel Arc più veloce fino al 5% s...
Il tuo ETF ha molta più NVIDIA di...
Il Fairphone Gen 6+ è ufficiale con un n...
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:10.


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