Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Allocazione dinamica [prime armi]
Forum - C/C++ - Allocazione dinamica [prime armi]

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
slacer (Normal User)
Newbie


Messaggi: 13
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 17:21
Mercoledì, 17/03/2010
Codice sorgente - presumibilmente C++

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int *leggi(int n){
  5. int *array=malloc(sizeof(int)*n);
  6. int i;
  7. for(i=0;i<n;i++)scanf("%d",*array+i);
  8. return array;
  9.  
  10. }
  11.  
  12. void stampa(int *sequenza,int n)
  13. {
  14. int i;
  15. for(i=0;i<n;i++){
  16. printf("|%d|",sequenza[i]);
  17. }
  18.  
  19. }
  20.  
  21. void main(){
  22. int n,*sequenza;
  23. printf("Inserisci grandezza vettore\n");
  24. scanf("%d",&n);
  25. sequenza=leggi(n);
  26. stampa(*sequenza,n);
  27. return 0;
  28. }



Apparte i 3-4 warning mi da errore:
Segmentation fault.
Quando deve stampare il vettore.
Scusate l'ignoranza, ma provengo da una scuola superiore in cui usavo il c++(2 anni fa) e non avevo mai visto la malloc...
Sopratutto non capisco
Codice sorgente - presumibilmente Plain Text

  1. for(i=0;i<n;i++)scanf("%d",array+i);


Presa pari pari da un algoritmo del prof...qualcuno può spiegarla in 2 parole? :D

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:25
Mercoledì, 17/03/2010
Questa

stampa(*sequenza,n);

deve essere

stampa(sequenza,n);


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 17:31
Mercoledì, 17/03/2010
Testo quotato

Sopratutto non capisco
Codice sorgente - presumibilmente Plain Text

  1. for(i=0;i<n;i++)scanf("%d",array+i);


Presa pari pari da un algoritmo del prof...qualcuno può spiegarla in 2 parole? :D



inizialmente fà assumere il valore 0 alla variabile i, fino a quando i è minore di n esegue
Codice sorgente - presumibilmente Plain Text

  1. scanf("%d",array+i)

e aumenta di 1 i ogni volta

Ultima modifica effettuata da il 17/03/2010 alle 17:35
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:15
Mercoledì, 17/03/2010
La cosa importante è che in questa riga

Codice sorgente - presumibilmente Plain Text

  1. scanf("%d",array+i)



si utilizza l' "aritmetica dei puntatori" ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
slacer (Normal User)
Newbie


Messaggi: 13
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 11:29
Giovedì, 18/03/2010
Testo quotato

Postato originariamente da D@vide:

Testo quotato

Sopratutto non capisco
Codice sorgente - presumibilmente Plain Text

  1. for(i=0;i<n;i++)scanf("%d",array+i);


Presa pari pari da un algoritmo del prof...qualcuno può spiegarla in 2 parole? :D



inizialmente fà assumere il valore 0 alla variabile i, fino a quando i è minore di n esegue
Codice sorgente - presumibilmente Plain Text

  1. scanf("%d",array+i)

e aumenta di 1 i ogni volta



Il for lo so cosa fa xD
Ma il fatto è che non poteva scrivere array ?
Testo quotato

Postato originariamente da nessuno:

La cosa importante è che in questa riga

Codice sorgente - presumibilmente Plain Text

  1. scanf("%d",array+i)



si utilizza l' "aritmetica dei puntatori" ...


Cioè?
Praticamente incrementa la memoria di I per scrivere il valore di ogni dato del vettore fino a n-1?

Grazie a tutti per le risposte :)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:30
Giovedì, 18/03/2010


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
slacer (Normal User)
Newbie


Messaggi: 13
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 8:54
Venerdì, 19/03/2010
Ok capito tutto =) grazie mille!

PM Quote
Avatar
slacer (Normal User)
Newbie


Messaggi: 13
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 12:52
Martedì, 23/03/2010
scusate ragà ho sempre un altro problema, scrivo qua senza creare altre discussioni:
Codice sorgente - presumibilmente C++

  1. int *leggi(int n){
  2. srand(time(NULL));
  3. printf("Inserisce i valori automaticamente nel vettore di %d elementi\n",n);
  4. int j;
  5. int *array=malloc(sizeof(int)*n);
  6. int i=0;
  7. while(i<n){
  8. j = rand()%100+1;
  9. array+i=j;
  10. i++;
  11. return array;
  12. }


ordfu.c:21: error: lvalue required as left operand of assignment
alla riga: array+i=j;
scusate ma non riesco ad arrivarci da solo :(

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:22
Martedì, 23/03/2010
*(array+i)=j;

oppure

array[ i]=j;

Ultima modifica effettuata da nessuno il 23/03/2010 alle 13:23


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo