Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-06-2004, 18: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, 10: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, 11: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, 16: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, 17: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, 17: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, 21: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, 21: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, 13: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, 13:58   #10
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16213
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, 15: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, 16: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, 09: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


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
ECOVACS DEEBOT MINI è tornato al ...
Oggi in sconto su Amazon ci sono gli iPh...
OpenAI conferma: primo dispositivo hardw...
Nuovi arrivi per Lefant M330Pro, sempre ...
Un'auto su cinque è cinese: cosa ...
La cometa interstellare 3I/ATLAS e le nu...
Blue Origin presenta TeraWave, una nuova...
Compra una GeForce RTX 5080 venduta e sp...
Telescopio spaziale James Webb: osservat...
L'IA non ha portato quasi nessun benefic...
Sony LinkBuds Clip, gli auricolari open ...
La fibra è sempre più diff...
Arriva Vertiv CoolPhase PAM: raffreddame...
Chiamate cristalline e ANC evoluto a pre...
Adobe aggiorna Premiere e After Effects:...
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:09.


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