Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-12-2004, 11:08   #1
Ir0nM4id3n84
Bannato
 
Iscritto dal: Nov 2004
Messaggi: 124
[C]Funzione che alloca dinamicamente una matrice

Ciao,
ho un problema...non mi ricordo più come ha fatto il proff a lezione per creare una funzione che mi alloca dinamicamente una matrice...

vi spiego...il programma chiede nel main il numero di righe ed il numero di colonne e li mette in 2 variabili....poi viene chiamata una funzione che mi crea una matrice con quel numero di righe e quel numero di colonne?

Qualcuno mi potrebbe dare una mano a ricostruire il tutto?

Grazie
Ir0nM4id3n84 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 11:34   #2
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Ciao, con la premessa che io il C lo sto studiando proprio da poco, quindi potrei anche dire una fesseria....

Per l'allocazione dinamica dovresti usare la funzione malloc() che ha questo prototipo:

Codice:
void  *malloc(size_t  numero_di_byte);
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 11:48   #3
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
avrà usato malloc + calloc

~§~ Sempre E Solo Lei ~§~ ;
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 11:56   #4
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Forse intendi una roba tipo questa?

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

unsigned int **creamatrice(unsigned int, unsigned int);

unsigned int **creamatrice(unsigned int x, unsigned int y) {
  unsigned int **matrix, count;

  matrix = calloc(x, sizeof(unsigned int *));

  for (count = 0; count < x; count++) 

    matrix[count] = calloc(y, sizeof(unsigned int));
  
  return matrix;

}
int main(int argc, char *argv[]) {

  unsigned int x, y, **matrice;
  
  if (argc == 3) {
    
    x = atoi(argv[1]);
    y = atoi(argv[2]);

    matrice = creamatrice(x, y);

  }
  else
    return 1;

  return 0;
}
Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 12:47   #5
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
con solo malloc dovrebbe essere una cosa del genere se funzionasse

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

/* elemento della matrice */
struct ProxElem{
        int elem;
        ProxElem *ProxElem;
};

/* elemento dell'array contentente gli indirizzi delle righe dell'array */
struct ProxRiga{
        ProxElem *Riga;
        ProxRiga *Prox;
};

void Allocazione_Colonne (ProxRiga *TestaRiga, int c){
	ProxElem *TestaElem, *Prec, *App;
	int i;
	if (c>0){
		TestaElem = malloc (sizeof(ProxElem));
		TestaElem->ProxElem = NULL;
	    printf ("\nInserisci elemento:\t");
		scanf ("%d", TestaElem->elem);
		TestaRiga->Riga = TestaElem;
		Prec = TestaRiga->Riga;
		for (i=1;i<c;i++){
			App = malloc (sizeof(ProxElem));
			App->ProxElem = NULL;
			printf ("\nInserisci elemento:\t");
			scanf ("%d", App->elem);
			Prec->ProxElem = App;
			Prec = App;
		}
	}
}

void Allocazione_Righe (ProxRiga *Testa, int r, int c){
	ProxRiga *App, *Precedente;
	int i;
	if (r>0){
		Testa = malloc (sizeof(ProxRiga));
		Testa->Prox = NULL;
		Allocazione_Colonne (Testa, c); 
		Precedente = Testa;
		for (i=1; i<r;i++){
			App = malloc (sizeof(ProxRiga));
			App->Prox = NULL;
			Allocazione_Colonne (App, c);
			Precedente->Prox = App;
			Precedente = App;
		}
	}
}

/* visualizzazione delle matrice */
void Visualizza (ProxRiga *TestaRiga){
	ProxElem *App;
	printf ("\nMatrice\n");
	if (TestaRiga != NULL){
		printf ("\t%d",TestaRiga->Riga->elem);
		App = TestaRiga->Riga->ProxElem;
		while (App != NULL){
			printf ("\t%d", App->elem);
			App = App->ProxElem;
		}
	}
}

/* main */
int main (){
        int Righe, Colon;
        ProxRiga *TestaRiga = NULL;
		ProxRiga *App;
		Allocazione_Righe (TestaRiga,Righe,Colon);
		App=TestaRiga;
		while (App != NULL){
			Visualizza (TestaRiga);
			App = App->Prox;
		}
		return 1;
}
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 13:11   #6
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Beh , con solo malloc dovrebbe funzionare anche così :

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

unsigned int **creamatrice(unsigned int, unsigned int);
void printmatrix(unsigned int **, int, int);

unsigned int **creamatrice(unsigned int x, unsigned int y) {
  unsigned int **matrix, count;

  matrix = malloc(x*sizeof(unsigned int *));

  for (count = 0; count < x; count++) 

    matrix[count] = malloc(y*sizeof(unsigned int));
  
  return matrix;

}

void printmatrix(unsigned int **matrix, int x, int y) {
  
  int a,b;
  for (b=0; b<y; b++) {
    for (a=0; a<x; a++) {
      printf("%4u ", matrix[a][b]);
      if ( a == x-1 )
	putchar('\n');
    }
  }

  putchar('\n');
  putchar('\n');
}


int main(int argc, char *argv[]) {

  unsigned int x, y, **matrice;
  
  if (argc == 3) {
    
    x = atoi(argv[1]);
    y = atoi(argv[2]);

    matrice = creamatrice(x, y);
    
    printmatrix(matrice, x, y);
  }
  else
    return 1;

  return 0;
}
Ci ho anche messo una funzione che printa i valori della matrice dopo averla creata.

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 13:29   #7
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
Anonimo che cavolo sbaglio nel program?

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 13:38   #8
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Ero andato a magnare .

Perchè, il tuo prog non va? Non l'ho ancora provato , ma non crea la matrice o non si compila?

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 13:41   #9
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
non si compila

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 13:44   #10
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da Fenomeno85
non si compila

~§~ Sempre E Solo Lei ~§~

Hai dimenticato "struct" davanti alla dichiarazione di tutte le strutture .

Se aspetti un attimo provo a correggertelo e poi te lo riposto

Ciao
__________________
GPU Compiler Engineer

Ultima modifica di AnonimoVeneziano : 05-12-2004 alle 13:51.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 13:50   #11
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Ecco la versione corretta
Codice:
#include <stdio.h>
#include <stdlib.h>

/* elemento della matrice */
struct ProxElem{
        int elem;
        struct ProxElem *ProxElem;
};

/* elemento dell'array contentente gli indirizzi delle righe dell'array */
struct ProxRiga{
        struct ProxElem *Riga;
        struct ProxRiga *Prox;
};

void Allocazione_Colonne (struct ProxRiga *TestaRiga, int c){
	struct ProxElem *TestaElem, *Prec, *App;
	int i;
	if (c>0){
		TestaElem = malloc (sizeof(struct ProxElem));
		TestaElem->ProxElem = NULL;
	    printf ("\nInserisci elemento:\t");
		scanf ("%d", TestaElem->elem);
		TestaRiga->Riga = TestaElem;
		Prec = TestaRiga->Riga;
		for (i=1;i<c;i++){
			App = malloc (sizeof(struct ProxElem));
			App->ProxElem = NULL;
			printf ("\nInserisci elemento:\t");
			scanf ("%d", App->elem);
			Prec->ProxElem = App;
			Prec = App;
		}
	}
}

void Allocazione_Righe (struct ProxRiga *Testa, int r, int c){
	struct ProxRiga *App, *Precedente;
	int i;
	if (r>0){
		Testa = malloc (sizeof(struct ProxRiga));
		Testa->Prox = NULL;
		Allocazione_Colonne (Testa, c); 
		Precedente = Testa;
		for (i=1; i<r;i++){
			App = malloc (sizeof(struct ProxRiga));
			App->Prox = NULL;
			Allocazione_Colonne (App, c);
			Precedente->Prox = App;
			Precedente = App;
		}
	}
}

/* visualizzazione delle matrice */
void Visualizza (struct ProxRiga *TestaRiga){
	struct ProxElem *App;
	printf ("\nMatrice\n");
	if (TestaRiga != NULL){
		printf ("\t%d",TestaRiga->Riga->elem);
		App = TestaRiga->Riga->ProxElem;
		while (App != NULL){
			printf ("\t%d", App->elem);
			App = App->ProxElem;
		}
	}
}

/* main */
int main (){
        int Righe, Colon;
        struct ProxRiga *TestaRiga = NULL;
		struct ProxRiga *App;
		Allocazione_Righe (TestaRiga,Righe,Colon);
		App=TestaRiga;
		while (App != NULL){
			Visualizza (TestaRiga);
			App = App->Prox;
		}
		return 1;
}
Ti faccio solo una domanda: Come fai a prendere in input le righe e le colonne della matrice?

Non vedo nessuna parte del programma dedicata a quello

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 14:01   #12
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
Quote:
Originariamente inviato da AnonimoVeneziano
Ecco la versione corretta
Codice:
#include <stdio.h>
#include <stdlib.h>

/* elemento della matrice */
struct ProxElem{
        int elem;
        struct ProxElem *ProxElem;
};

/* elemento dell'array contentente gli indirizzi delle righe dell'array */
struct ProxRiga{
        struct ProxElem *Riga;
        struct ProxRiga *Prox;
};

void Allocazione_Colonne (struct ProxRiga *TestaRiga, int c){
	struct ProxElem *TestaElem, *Prec, *App;
	int i;
	if (c>0){
		TestaElem = malloc (sizeof(struct ProxElem));
		TestaElem->ProxElem = NULL;
	    printf ("\nInserisci elemento:\t");
		scanf ("%d", TestaElem->elem);
		TestaRiga->Riga = TestaElem;
		Prec = TestaRiga->Riga;
		for (i=1;i<c;i++){
			App = malloc (sizeof(struct ProxElem));
			App->ProxElem = NULL;
			printf ("\nInserisci elemento:\t");
			scanf ("%d", App->elem);
			Prec->ProxElem = App;
			Prec = App;
		}
	}
}

void Allocazione_Righe (struct ProxRiga *Testa, int r, int c){
	struct ProxRiga *App, *Precedente;
	int i;
	if (r>0){
		Testa = malloc (sizeof(struct ProxRiga));
		Testa->Prox = NULL;
		Allocazione_Colonne (Testa, c); 
		Precedente = Testa;
		for (i=1; i<r;i++){
			App = malloc (sizeof(struct ProxRiga));
			App->Prox = NULL;
			Allocazione_Colonne (App, c);
			Precedente->Prox = App;
			Precedente = App;
		}
	}
}

/* visualizzazione delle matrice */
void Visualizza (struct ProxRiga *TestaRiga){
	struct ProxElem *App;
	printf ("\nMatrice\n");
	if (TestaRiga != NULL){
		printf ("\t%d",TestaRiga->Riga->elem);
		App = TestaRiga->Riga->ProxElem;
		while (App != NULL){
			printf ("\t%d", App->elem);
			App = App->ProxElem;
		}
	}
}

/* main */
int main (){
        int Righe, Colon;
        struct ProxRiga *TestaRiga = NULL;
		struct ProxRiga *App;
		Allocazione_Righe (TestaRiga,Righe,Colon);
		App=TestaRiga;
		while (App != NULL){
			Visualizza (TestaRiga);
			App = App->Prox;
		}
		return 1;
}
Ti faccio solo una domanda: Come fai a prendere in input le righe e le colonne della matrice?

Non vedo nessuna parte del programma dedicata a quello

Ciao
dimenticate

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 14:06   #13
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
scusa ma a te te lo compila?

a me no

Compiling...
lista.cpp
lista.cpp: In function `void Allocazione_Colonne(ProxRiga*, int)':
lista.cpp:20: error: invalid conversion from `void*' to `ProxElem*'
lista.cpp:27: error: invalid conversion from `void*' to `ProxElem*'
lista.cpp: In function `void Allocazione_Righe(ProxRiga*, int, int)':
lista.cpp:41: error: invalid conversion from `void*' to `ProxRiga*'
lista.cpp:46: error: invalid conversion from `void*' to `ProxRiga*'

ma sono obbligatori ridifinire le struct io non le avevo mai messe almeno mi ricordo così

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 14:16   #14
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
melchior@melchior:~/Cprograms$ gcc -g fenom.c -o fenom
melchior@melchior:~/Cprograms$

Si a me lo compila .

In C devi sempre mettere "struct" davanti alle dichiarazione , non so in C++ , a meno di aver definito un tipo con TypeDef , a quel punto puoi usare il nome del tipo .

Comunque il tuo programma ha altri problemi oltre a quello , come ad esempio quello che la funzione "Allocazione_Righe" non fa ritornare alcun valore lasciando TestaRiga sempre NULL nella "main" , e non soddisfando mai la condizione "while ( App != NULL ) " . In questo modo perdi il puntatore alla struttura una volta uscito dalla funzione.


Inoltre mi sembra ci siano altri problemi, riguardatelo bene

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 14:22   #15
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
Quote:
Originariamente inviato da AnonimoVeneziano
melchior@melchior:~/Cprograms$ gcc -g fenom.c -o fenom
melchior@melchior:~/Cprograms$

Si a me lo compila .

In C devi sempre mettere "struct" davanti alle dichiarazione , non so in C++ , a meno di aver definito un tipo con TypeDef , a quel punto puoi usare il nome del tipo .

Comunque il tuo programma ha altri problemi oltre a quello , come ad esempio quello che la funzione "Allocazione_Righe" non fa ritornare alcun valore lasciando TestaRiga sempre NULL nella "main" , e non soddisfando mai la condizione "while ( App != NULL ) " . In questo modo perdi il puntatore alla struttura una volta uscito dalla funzione.


Inoltre mi sembra ci siano altri problemi, riguardatelo bene

Ciao
io in Allocazione_Righe modifico la testa direttamente infatti è un passaggio per indirizzo quindi si modifica.
Mi piacerebbe riuscire a compilare ma MinGW non me lo compila.

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 14:30   #16
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da Fenomeno85
io in Allocazione_Righe modifico la testa direttamente infatti è un passaggio per indirizzo quindi si modifica.
Mi piacerebbe riuscire a compilare ma MinGW non me lo compila.

~§~ Sempre E Solo Lei ~§~

Non passi alla funzione una struttura, ma un PUNTATORE a struttura che è esattamente identico ad una variabile qualsiasi, perciò anch'esso è passato per valore .

Quindi TestaRiga (che è una qualsiasi variabile) viene copiata e passata alla funzione che la modifica e poi all' uscita la cancella .

Inoltre anche le strutture vengono passate per definizione per valore e non per riferimento , quindi in ogni caso avresti comunque sbagliato

Ciao

PS= Non so perchè non ti si compili su MiniGW . Hai provato a compilare la mia correzione?
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 14:39   #17
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
Quote:
Originariamente inviato da AnonimoVeneziano
Non passi alla funzione una struttura, ma un PUNTATORE a struttura che è esattamente identico ad una variabile qualsiasi, perciò anch'esso è passato per valore .

Quindi TestaRiga (che è una qualsiasi variabile) viene copiata e passata alla funzione che la modifica e poi all' uscita la cancella .

Inoltre anche le strutture vengono passate per definizione per valore e non per riferimento , quindi in ogni caso avresti comunque sbagliato

Ciao

PS= Non so perchè non ti si compili su MiniGW . Hai provato a compilare la mia correzione?
bho aspe che sto installando visual studio ... cmq forse ho capito quello che dici ma cmq dovrei riuscirci a lavorare su quei dati dato che sono nella zona heap ... però mi sa che così ho qualche problemino.

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2004, 12:16   #18
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
caiser ... l'ho rifatto e cavolo perdo tutto, eppure io mi ricordavo che doveva funzionare, con le classi avevo sempre fatto così

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2004, 13:35   #19
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
premesso che io a scuola avevo studiato le liste solo con le classi .. ho provato a vedere e infatti funziona con le classi

ma allora senza ste classi come faccio a non perdere i valori volendo utilizzare le funzioni?

Codice:
/* lista con classe */

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

struct dati {
	int valore;
};

struct nodo {
	dati val;
	nodo *succ;
};

class lista{
private:
	nodo *testa;
public:
	void visualizza();
	void carica (dati valori);
	lista();
	~lista();
};

/* distruttore */
lista::~lista(){
	nodo *supp;
	supp = new(nodo);
	if (testa == NULL){
		printf ("\nLa lista e' vuota. Nessun elemento cancellato.\n\n\n");
	}
	else {
		while (testa != NULL){
			supp = testa;
			testa = testa->succ;
			delete(supp);
		}
		printf ("\nTutta la lista e' stata deallocata.\n\n");
	}
	system ("PAUSE");
}
			
/* inserimento sempre in testa */
void lista::carica(dati valori){
	nodo *supp;
	supp = new (nodo);
	supp->val = valori;
	supp->succ = testa;
	testa = supp;
}

void lista::visualizza(){
	nodo *supp;
	supp = testa;
	while (supp!=NULL){
		printf ("%d", supp->val.valore);
		supp= supp->succ;
	}
}

/* costruttore */
lista::lista(){
	testa = NULL;
}

int main (){
	dati valori;
	lista list;
	printf ("\nInserisci il valore:\t");
	scanf ("%d",&valori.valore);
	list.carica(valori);
	list.visualizza ();
	return 1;
}
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2004, 13:52   #20
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Comunque si parlava di C , non di C++

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Hyundai: spunta un'elettrica estremament...
Una connessione diretta con AWS European...
La Toyota Yaris avrà una versione...
Minori sessualizzati da Grok: l'UE mette...
NIO stabilisce il nuovo record di scambi...
Dell Private Cloud sempre più ape...
Ennesimo incidente per la guida autonoma...
Dopo le maniglie, è il turno dei ...
Addio incendi incontrollati? Svolt dice ...
WINDTRE si mette in proprio: vender&agra...
The Mandalorian & Grogu: il trailer ...
OpenClaw sotto attacco: i malware infost...
Resident Evil Requiem: pre-load dal 25 f...
Vaticano, la Messa si traduce in 60 ling...
Kia prepara il facelift della Kia EV5: 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: 01:41.


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