|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
[C++] operatore freccia ( -> )
Qualcuno sà commentare con spigazione cosa le righe di questo code?
l'ho fatto io, qualcuno mi può correggere?? #include <iostream.h> struct Lnodo { //Struttura.... bhè questo è facile char dato; //stringa Lnodo *succ; //punto la prima cella della struttura }; void main () { Lnodo *base=NULL, *p; //la prima cella è 0, *p=puntatore a che? cout << "Introdurre una sequenza di caratteri (^Z per terminare):" << endl; char ch; //dato stringa while (cin.get(ch)) { //ciclo p = new Lnodo; //p = prima cella struttura Lnodo e nuovo oggetto p->dato = ch; // p->dato equivale a (*p).dato // p punta a dato e prende il primo char p->succ = base; // p punta alla locazione dell'oggetto base 0=NULL base = p; // base (locazione)=indirizzo di p } while (p) { cout << p->dato; //non lo sò base = p; //non lo sò p = p->succ; //non lo sò delete base; //cancello gli oggetti creati con new } } quello che non capisco è se scrivo okay mi stampa yako. Perchè inizia al contrario? succ è l'indirizzo della cella come p? pure base è un puntatore alla locazione o indirizzo? --------------- documentate voi passo passo e ben documentato per chiarire una volta per tutte. ho il cervello un pò bruciato!!! |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Re: [C++] operatore freccia ( -> )
#include <iostream.h>
struct Lnodo { //Struttura.... bhè questo è facile char dato; //stringa //carattere, non stringa Lnodo *succ; //punto la prima cella della struttura }; void main () { Lnodo *base=NULL, *p; //la prima cella è 0, *p=puntatore a che? //base non punta a niente, p non è inizializzato cout << "Introdurre una sequenza di caratteri (^Z per terminare):" << endl; char ch; //dato stringa //carattere, non stringa while (cin.get(ch)) { //ciclo p = new Lnodo; //viene allocata una struttura che viene puntata da p p->dato = ch; // p->dato equivale a (*p).dato //inizializzo la struttura con il carattere letto // p punta a dato e prende il primo char //p non punta a dato, p punta ad una struttura di tipo Lnodo p->succ = base; // p punta alla locazione dell'oggetto base 0=NULL //p punta sempre alla struttura, succ è un membro della struttura puntata da p, base è NULL solo al primo passaggio, al successivo punta alla struttura allocata nel ciclo rpecedente base = p; // base (locazione)=indirizzo di p //semplicemente al valore di base viene assegnato il valore di p (non l'indirizzo), in pratica ora base punta alla stessa struttura a cui punta p } while (p) { cout << p->dato; //stampa il carattere contenuto nel campo dato della struttura puntata da p base = p; //come sopra p = p->succ; //ci si sposta alla struttura successiva (p dopo punta alls struttura successiva) puntata dal campo succ della struttura puntata da p delete base; //cancello la strttura puntata da base, l'abbiamo già stampata } } Viene stampato al contrario perchè ogni carattere digitato viene inserito in testa alla lista... Se dopo si comincia a stampare dalla testa quindi si comincerà a stampare dall'ultimo carattere inserito... |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
dunque:
p = new Lnodo; la memoria, per questa struttura viene allocata dal prg? ..... e parte dalla fine dell'ultima struttura terminante con NULL ovvero /0;.....giusto? e comunque ogno srtuttura è un byte cioè un char..... giusto? se questo sopra è giusto puoi dirmi perchè parte al contrario? non riesco a capirlo......forse non comprendo while(p) in quanto non vedo ne ++ ne --, che significa while(p) forse mentre p punta a qualcosa?? puoi spigarmi?? Ultima modifica di okay : 04-04-2004 alle 22:09. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Significa: fino a che p != 0 (NULL)...l'utlima struttura allocata ha p == NULL...
No...l'alòlocazione funziona in maniera diversa, ma non ti deve importare...scrive al contrario per il motivo che ti ho scritto sopra... |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2002
Città: Padova
Messaggi: 2206
|
La tua struct nodo è formata da un campo dati char e di un puntatore al successivo nodo della lista.
Se scrivi ok e leggi ko è semplicemente perchè tratti dei caratteri e non delle stringhe, che vengono presi in considerazione singolarmente. Esempio con OK: - Primo carattere: O - Aspetto della lista: base->O->NULL - Secondo carattere: K - Aspetto della lista: base->K->O->NULL Se stampi la lista a partire dalla testa, base nel tuo caso, è ovvio che stampi KO e non OK ![]()
__________________
Fisso: Case Corsair Carbide 275Q PSU Seasonic Focus GX-850 MB Asus TUF GAMING X570-PLUS CPU AMD Ryzen 3900x Cooler AMD Wrait Prism RAM 2*16GB G.Skill RipJaws V DDR4 3200MHz VGA EVGA GeForce RTX 2060 Super 8GB Monitor Asus VX239H SSD 2*ADATA XPG SX8200 PRO 1TB Raid0 Router Netgear DGND4000 SO Windows 10 Print&Scan Epson WF-4830 / Laptop: Dell XPS L502X / Mobile: Pixel 7a |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:54.