Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
HONOR Magic V6 è arrivato in Italia a 2.299,90 euro con una promessa precisa: unire 4 mm di spessore da aperto (8,75 mm chiuso nel modello White, 9 mm negli altri colori) a una batteria da 6.660 mAh, la più capiente mai vista su un pieghevole. Lo abbiamo usato per oltre una settimana in versione Red 16/512 GB per capire se lo Snapdragon 8 Elite Gen 5 tiene testa alla concorrenza anche fuori dai benchmark ufficiali
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-06-2004, 17:47   #1
Darkman
Senior Member
 
L'Avatar di Darkman
 
Iscritto dal: Nov 1999
Città: Messina
Messaggi: 4358
[HELP] Strutture in C per un esame...

Salve,

SONO DISPERATO!

Bel modo per iniziare ma ho un grosso problema

Sto studiando C per dare un esame. Adesso sono arrivato alle pile e alle code e si introduce il concetto di struttura e di puntatore ->

Purtroppo non sono riuscito a capirlo in nessuno modo. Ho provato a leggere sui libri ma sono molto criptici.
Esiste qualche anima pia disposta a darmi qualche dritta o a linkarmi qualche tutorial che spiega passo passo a che servano e come si utilizzano???


Vi prego, sono DISPERATO!
__________________
I can't remeber all the times I tried to tell myseft to hold on to these moments as they pass... A Long December...
Darkman è offline   Rispondi citando il messaggio o parte di esso
Old 13-06-2004, 09:17   #2
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
spiegati meglio ..............
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 13-06-2004, 10:24   #3
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Una struttura è un inseme di variabili raggruppate e raggiungibili con un unico identificativo...

Ad esempio:
Codice:
struct x {
    int a;
    char c;
};

/*Se dichiari*/
struct x variabile:
variabile.a permette di lavorare su a, variabile.c permette di lavorare su c... E qui non ci dovrebbero essere difficoltà...
Devi mettere la parola struct ogni volta che chiami in causa il tipo x (ad esempio sizeof(struct x))...
Se vuoi omettere la parola struct devi usare typedef...

typedef struct x tipox;

A questo punto puoi usare tipox come un qualsiasi tipo di variabile...omettendo struct...

Oppure si può fare anche:
Codice:
typedef struct x {
    int a;
    char c;
} tipox;
Per i puntatori...fanno male ad introdurli con le strutture dati perchè in teoria sarebbe meglio parlarne prima...

Un puntatore è un variabile atta a contenere un indirizzo di memoria che contiene una variabile di un determinato tipo...

In questo caso entrano in gioco gli l'operatori & e *...

& permette di ottenere l'indirizzo a cui è contenuta un carta variabile (ricordati che anche un puntatore è una variabile ed è memorizzato ad un certo indirizzo di memoria)...

Ad esempio:

tipox a;
&a; /*ottiene l'indirizzo a partire da cui è memorizzata a*/
&a.c; /*ottiene l'indirizzo a partire da cui è memorizzata a.c*/

* ha due incarnazioni anche nettamente separate...
La prima è quella che serve per dichiarare un puntatore:

int * p;

dichiara una variavbile p di tipo int *... Il tipo int * è un puntatore a una variabile di tipo int...o meglio p sarà atta a contenere indirizzi di memoria di variabili di tipo int...
Codice:
int a, *p, b; /*dichiaro due interi a e b ed un puntatore a intero p*/

a = 5;
p = &a; /*p uguale l'indirizzo di a - p punta ad a*/
Ora entra in gioco l'altra funzionalità di *... * applicato ad un puntatore permette di raggiungere l'area di memoria puntata dal puntatore:
Codice:
/*partendo dalla situazione predente*/
*p = 6; 
/*in pratica assegno alla cella di memoria il cui indirizzo è
 contenuto in p il valore 6*/
b = *p;
/*assegno a b il contenuto dell'area di memoria puntata da p*/
In pratica a questo punto a contiene 6 e b contiene il contenuto dell'intero puntato da p...cioè 6...
Applicando i puntatori alel strutture possiamo parlare dell'operatore ->
Codice:
tipox a, *p;
*p = &a; /*stessa cosa, come prima, solo che qui a è una
 struttura*/
(*p).c = 'x';
/*raggiungo il contenuto dell'area di memoria puntata da p con
 *p...dato che una struct posso ottenere l'elemento c con l'aiuto 
dell'operatore . */
p->c = 'y';
/*è equivalente all'operazione sopra !!! -> permette di 
raggiungere direttamente (senza la notazione sopra) il membro 
della struttura puntata da p */
Fammi sapere se hai capito
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-06-2004, 15:55   #4
maxithron
Senior Member
 
L'Avatar di maxithron
 
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
Mi sembra assurdo anche a me in effetti introdurre lo studio dei puntatori correlati alle strutture senza averli almeno già illustrati....

Cmq, per quanto riguarda l'utilizzo dei puntatori nelle strutture, devi pensare che:

Codice:
struct nome_variabile {
           int *x;  /* puntatore al tipo int */
           int *y;  /* puntatore al tipo int */
} nome_istanza;
In questo semplice caso, abbiamo solo dichiarato 2 puntatori al tipo int ma senza inizializzarli ancora, quindi, servono a poco.

Per inizializzarli, si può assegnare loro l'indirizzo di una variabile.

Nel caso sopra, la nostra variabile sarebbe l'istanza della struttura (nome_istanza)

per cui, se dichiariamo due variabili di tipo int, ad esempio a, b, avremo che:

Codice:
nome_istanza.x = &a 
nome_istanza.y = &b
ora, i puntatori sono inizializzati.

questo vuol dire che a *nome_istanza.x sarà assegnato il valore contenuto in a;
analogamente, a *nome_istanza.y sarà invece assegnato il valore contenuto in b

un altro semplice esempio lo trovi qui:

http://alpha.science.unitn.it/~fiore...guidac030.html

ovvio che se fai una ricerca con google su 'strutture e puntatori', trovi una mole enorme di link utilissimi.
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n;
Utilizzando atomi trivalenti drogheremo il silicio di tipo p;
Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo
maxithron è offline   Rispondi citando il messaggio o parte di esso
Old 13-06-2004, 16:31   #5
Darkman
Senior Member
 
L'Avatar di Darkman
 
Iscritto dal: Nov 1999
Città: Messina
Messaggi: 4358
Grazie mille per le rispostone!

Fatemi capire una cosa:

int p - dichiaro un intero.
int *p - è un puntatore, giusto? Punta l'indirizzo di memoria dove è contenuto p, giusto?

Ma in pratica a che serve? perchè usare un puntatore quanto posso lavorare direttamente sulla variabile?
Capisco per un array...

Toglietemi un'altra curiosità, ma **p a che serve? Qualche volta il mio professore ha usato puntatore di puntatore. Perchè???

Scusate la mia ottusità!
__________________
I can't remeber all the times I tried to tell myseft to hold on to these moments as they pass... A Long December...
Darkman è offline   Rispondi citando il messaggio o parte di esso
Old 13-06-2004, 16:35   #6
Darkman
Senior Member
 
L'Avatar di Darkman
 
Iscritto dal: Nov 1999
Città: Messina
Messaggi: 4358
Molto spesso negli alberi e nelle liste si usa ->

Example

Parlo di code
Codice:
struct nodo
{
int info;
struct nodo *next;
}
coda;
poi da una spiegazione di ricerca del primo elemento in coda

Codice:
int primo(coda *p)
{
return p-> info;
}
Che vuol dire quel return p-> info??
__________________
I can't remeber all the times I tried to tell myseft to hold on to these moments as they pass... A Long December...
Darkman è offline   Rispondi citando il messaggio o parte di esso
Old 13-06-2004, 20:51   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Darkman
Grazie mille per le rispostone!

Fatemi capire una cosa:

int p - dichiaro un intero.
int *p - è un puntatore, giusto? Punta l'indirizzo di memoria dove è contenuto p, giusto?

Ma in pratica a che serve? perchè usare un puntatore quanto posso lavorare direttamente sulla variabile?
Capisco per un array...

Toglietemi un'altra curiosità, ma **p a che serve? Qualche volta il mio professore ha usato puntatore di puntatore. Perchè???

Scusate la mia ottusità!
Noooo...int *p non punta a niente se non lo inzializzi... int *p dichiara un puntatore di nome p che può puntare ad un inter...

int **p è un puntatore ad un puntatore...in pratica p può puntare ad un variabile di tipo int *...
Serve solitamente per modificare il contenuto (non quello a cui punta, ma la locazione a cui punta) di un puntatore all'interno di una funzione e per far quindi valere questa modifica anche nel flusso chiamante...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-06-2004, 20:53   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
poi da una spiegazione di ricerca del primo elemento in coda
Cì un piccolo errore:
Codice:
int primo(struct coda *p)
{
return p-> info;
}
p punta ad un elemento di tipo coda...
p->info ritorna la variaibile info contenuta all'interno della struttura puntata da p (sopra te l'ho spiegato)...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-06-2004, 12:23   #9
Darkman
Senior Member
 
L'Avatar di Darkman
 
Iscritto dal: Nov 1999
Città: Messina
Messaggi: 4358
Quindi dichiaro una variabile

int p

ed un puntatore *p che ancora non punta a nulla...

Per farlo puntare a p come devo fare?

*p=p???
__________________
I can't remeber all the times I tried to tell myseft to hold on to these moments as they pass... A Long December...
Darkman è offline   Rispondi citando il messaggio o parte di esso
Old 14-06-2004, 12:58   #10
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16214
Quote:
Originariamente inviato da Darkman
Quindi dichiaro una variabile

int p

ed un puntatore *p che ancora non punta a nulla...
La dichiarazione:
Codice:
int p;
dichiara che p e' una variabile di tipo int; invece:
Codice:
int *p;
dichiara che p e' variabile di tipo puntatore a int.
Non puoi usarle contemporaneamente.

Quote:
Per farlo puntare a p come devo fare?

*p=p???
Supponendo che il puntatore a int si chiami q, se fai:
Codice:
*q=p;
copi il valore di p nella zona puntata da q, pericoloso se p non e' stato inizializzato con malloc.
Per far puntare q alla zona in cui sta p, devi fare:
Codice:
q=&p;
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 14-06-2004, 14:53   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Darkman
Quindi dichiaro una variabile

int p

ed un puntatore *p che ancora non punta a nulla...

Per farlo puntare a p come devo fare?

*p=p???
Non puoi dare los tesso nome a variabili diverse

Darkman: te l'ho scritto sopra come fai ad inizializzare un puntatore !!!
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-06-2004, 15:05   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ah...ovviamente ad un puntatore puoi assegnare anche uno spazio di memoria allocato da malloc...

tipo * p;

p = (tipo *) malloc(sizeof(tipo));

E dopo lo tratti come un qualsiasi puntatore...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2004, 08:40   #13
Darkman
Senior Member
 
L'Avatar di Darkman
 
Iscritto dal: Nov 1999
Città: Messina
Messaggi: 4358
GRAZIE MILLE A TUTTI!
Mi piacerebbe avervi a casa mia per spiagarmi gli altri punti oscuri di un anno di C non troppo chiaro...
Provo a vedere cosa riesco a fare in questi giorni continuando a studia e a programmare qualcosina...

Grazie a tutti ancora!
__________________
I can't remeber all the times I tried to tell myseft to hold on to these moments as they pass... A Long December...
Darkman è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere? Recensione HONOR Magic V6: spessore record e sup...
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Gli ordini su Glovo ora si possono pagar...
Polymarket è stata di nuovo oscur...
Mova Z60 Ultra Roller Complete contro DR...
Paramount-Warner Bros.: dodici Stati USA...
GigaWiper: il malware che distrugge i di...
Lenovo Idea Tab Plus: sottile, leggero, ...
Logitech G PRO X Wireless contro HyperX ...
Il prossimo top di gamma di OPPO potrebb...
Comprare uno smartphone economico sta pe...
Google in pole position per utilizzare i...
Nintendo valuta una Switch 2 OLED con sc...
ChatGPT torna disponibile su WhatsApp in...
Non vuoi usare l'intelligenza artificial...
Metà del web ormai è bot: ...
Le big IA obbligate a cedere metà...
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: 08:50.


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