Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 13 su 13
  1. #11
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Qualcuno sa il perchè ? Sono entrambe puntatori ...

    edit:

    L' ho appena capito: se dichiaro:
    codice:
    char s1[]="ciao";
    char *s2=s1;
    La locazione di memoria di s1 è statica e non può cambiare, non posso allocarci memoria o cambiare la sua locazione:
    codice:
    s1=(char*)malloc(10*sizeof(char)); // errore
    Mentre s2 è un puntatore non un array, e come tale è dinamico.
    Per cui la dimensione di s1 è decisa a compile-time, ecco perchè sizeof ritorna la sua dimensione esatta.
    Invece la dimensione di s2 è variabile, la sua locazione di memoria può cambiare, per cui sizeof ritorna semplicemente la dimensione del puntatore, non potrebbe ritornare la lunghezza della stringa.

  2. #12
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da ramy89
    Qualcuno sa il perchè ? Sono entrambe puntatori ...
    Sono due cose diverse:

    codice:
     s
    +---+---+---+---+---+---+---
    | c | i | a | o |   | c | ........
    +---+---+---+---+---+---+---
     /\
     |
     +----------+
                |
     s1         |
    +---+       |
    |   | ------+
    +---+
    s è l'indirizzo di base della stringa (cioè dell'array di caratteri col terminatore alla fine), ma la locazione di memoria con quell'indirizzo contiene essa stessa il primo carattere della stringa. s1 invece è un puntatore, contiene un indirizzo che è quello di base della stringa ma si tratta di una variabile puntatore a parte, allocata da qualche altra parte nella memoria che con l'inizio della stringa non c'entra proprio nulla.
    Bisogna semplicemente dimenticarsi della regola array = puntatore che è falsa, in questo modo non risulta sorprendente che l'operatore sizeof possa restituire risultati diversi: in un caso ottieni la dimensione in byte dell'intero array (lo stabilisce anche lo standard) che è allocato staticamente, nell'altro ottieni semplicemente la dimensione del puntatore.
    every day above ground is a good one

  3. #13
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481

    Re: ciao

    Originariamente inviato da torn24
    inanzitutto non sapevo che inizializzare a zero gli elementi di un array
    si potesse fare array[]={0}; e credo che molti non lo sappiano
    Solo quando si dichiara, non sempre durante il codice.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.