Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Abbiamo provato Motorola razr fold, il pieghevole a libro con display interno LTPO da 8,09 pollici, Snapdragon 8 Gen 5 e batteria da 6000 mAh in 243 grammi. Pennino e custodia sopno già nella confezione, per un foldable che si caratterizza per il pannello luminoso, l'autonomia ottima per la categoria e le fotocamere coerenti e ben sfruttabili. Il listino è di 1999 euro, ma in vendita si trova già a molto meno
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente
Google Pixel Watch 5 ha affinato una formula già convincente con hardware più veloce, Gemini offline e nuovi strumenti per sport e benessere. Abbiamo provato la versione LTE da 41 mm, comoda anche di notte e ben proporzionata sui polsi piccoli. Il design resta un punto di forza, ma l'autonomia premia ancora il 45 mm e alcune funzioni AI non sono disponibili in Italia: ecco che cosa cambia rispetto a Watch 4 e quale formato conviene scegliere oggi
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo
Politica, accademia e industria a confronto su mercato unico, sicurezza e competitività. Nei laboratori di Vimercate, Nokia ha mostrato le nuove generazioni di chip ottici e i test che ogni prodotto deve superare prima di arrivare sul mercato
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: 16215
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


Motorola razr fold, dalla conchiglia al formato a libro. La recensione Motorola razr fold, dalla conchiglia al formato ...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo Nokia Innovation Day 2026: la sovranità e...
In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi In sella alla Fiido Nomads Pro: e-bike con motor...
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto ASUS Zenbook 14 (UX3480AA): tanta autonomia con ...
I filtri anti-spoofing non bastano: l'al...
Starship: SpaceX potrebbe tentare di rec...
Federico Veronesi vince i Wildlife Photo...
Samsung Galaxy bloccati dopo l'aggiornam...
L'UE prolunga il periodo di test del pro...
Offerte Amazon di oggi: e-bike da 616€, ...
La missione cino-europea ESA Smile ha in...
Cisco sulle tracce dell’IA nei malware: ...
Nuovo Codice della strada: stop alla PEC...
Blue Origin Constellation Park: un nuovo...
E-bike da 615€ su Amazon: Bodywel F20PRO...
Windows 11 24H2, stop al supporto per Ho...
Gemini 4 Argon disponibile per tutti: co...
Sony avrebbe chiuso Overdrive, lo store ...
Abbiamo scattato con OPPO Find X10 Pro M...
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: 07:05.


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