Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [c] sizeof

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [c] sizeof

    Ciao...ho trovato questa espressione:

    int **p = malloc(m * sizeof(int *));


    cosa vuol dire sizeof(int *) ??

    la dimensione di un puntatore a intero? Non sarebbe sempre un intero?

    non ho mai usato sizeof con un puntatore come argomento...mi spiegate il senso? :bubu:

  2. #2
    UN puntatore pesa sempre 4byte (se hai un processore a 32bit)
    qualcunque sia il tipo...
    prova...

    char *a;
    int *b;

    printf("%d", sizeof(a));
    printf("%d", sizeof(b));
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

  3. #3
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352

    Re: [c] sizeof

    Originariamente inviato da Lucked
    Ciao...ho trovato questa espressione:

    int **p = malloc(m * sizeof(int *));


    cosa vuol dire sizeof(int *) ??

    la dimensione di un puntatore a intero? Non sarebbe sempre un intero?

    non ho mai usato sizeof con un puntatore come argomento...mi spiegate il senso? :bubu:
    Un puntatore è un tipo come tutti gli altri e quindi se devi allocare dinamicamente memoria per un tipo puntatore usi la malloc e sizeof, ad esempio se vuoi allocare dinamicamente un array di stringhe:

    codice:
    char **array = (char **)malloc(10 * (sizeof(char *)));
    for(i = 0; i < 10; i++)
        array[i] = (char * )malloc(100 * sizeof(char));
    E' un esempio che ti ho fatto già altre volte :quote: :quote:

    Il fatto che sai già che un puntatore occupa 4 bytes non ti evita di usare sizeof perche comunque il numero di bytes usati per un tipo dipende dal compilatore.


  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    bello l'esempio che mi hai fatto:
    vediamo se riesco a interpretarlo:

    //alloco lo spazio per 10 puntatori a intero
    char **array = (char **)malloc(10 * (sizeof(char *)));

    //ogni puntatore punta a una stringa
    for(i = 0; i < 10; i++)
    array[i] = (char * )malloc(100 * sizeof(char));

    in pratica ho una matrice.

    E' un esempio che ti ho fatto già altre volte
    No no...impossibile :bubu:

  5. #5

    Re: Re: [c] sizeof

    Originariamente inviato da anx721
    Un puntatore è un tipo come tutti gli altri e quindi se devi allocare dinamicamente memoria per un tipo puntatore usi la malloc e sizeof, ad esempio se vuoi allocare dinamicamente un array di stringhe:

    codice:
    char **array = (char **)malloc(10 * (sizeof(char *)));
    for(i = 0; i < 10; i++)
        array[i] = (char * )malloc(100 * sizeof(char));
    E' un esempio che ti ho fatto già altre volte :quote: :quote:

    Il fatto che sai già che un puntatore occupa 4 bytes non ti evita di usare sizeof perche comunque il numero di bytes usati per un tipo dipende dal compilatore.

    quell'esempio è esattamente quello che si fà per allocare una matrice di 10 righe e 100 colonne

    Analogalmente ,in c++, lo puoi fare con l'operatore new...se non erro cosi':
    codice:
    void esempio(){
    const int N_righe = 10;
    const int N_colonne = 100;
    unsigned int i;
    
    char **mat;
    mat = new char*[N_righe];
    for(i=0;i<N_righe;i++)
     mat[i]=new char[N_colonne]
    
    return 0;
    }
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da Lucked
    No no...impossibile :bubu:
    Ti ricorda niente:

    codice:
    int main()
    {
       int n;
       int i;
      //ho una variabile puntatore(contiene un indirizzo),
      //in questo indirizzo il primo elemento e quindi anche
      //i successivi saranno caratteri
      char **array;
     
      printf("Inserisci la lunghezza dell'array:");
      scanf("%d", &n);
    
      //Allochiamo un array di n ppuntatori a char
      //(successiavemnte bisognera allocare la memoria per
      //ciascuno di questi puntatori)
      array = (char **) malloc (n * sizeof(char*));
    
      leggi_vettore_stringhe(array, n);
      //Stampiamlo le stringhe lette
     
      ordina_per_nome(array, n);
     
      printf("\n");
      for(i = 0; i < n; i++)
        printf("%s\n", array[i]);
     
      system("pause");
    }
    array = (char **) malloc (n * sizeof(char*));

    perchè hai messo a sizeof come arg. un puntatore anzichè char?

    malloc deve allocare spazio per la variable 'array'. Cos'è 'array'? E'un array di n puntatori a char (char *), e quindi n * sizeof(char *). Se 'array' fosse stato un array di char allora avrei usato n * sizeof(char)




  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    no...nego tutto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.