Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [C] array

  1. #1
    Utente bannato
    Registrato dal
    Jul 2002
    Messaggi
    99

    [C] array

    Agli esperti di C vorrei chedere un paio di cose:

    1)si possono dichiare in C array aperti (che non siano di caratteri, ma di interi per esempio)??? Se si,come???

    2)essendo un array in C un puntatore, come gestisco la chiamata di array nelle procedure, cioè:

    int v[10];

    int sommavalori(int vett[10])
    {
    int i, tot;
    for(i=0; i<10; i++)
    tot=tot+vett[i];
    return tot;
    }

    è giusto oppure devo scivere l'intestazione in un altro modo???

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772

    Re: [C] array

    Originariamente inviato da rikyxxx
    2) essendo un array in C un puntatore
    Forse è piu corretto dire che in C il nome di un array è anche puntatore all'array stesso.

    Quando devi passare un array nella funzione chiamante quindi basta passare il nome miaFunzione(myArray); (passi l'indirizzo di memoria del primo elemento)

    Nella funzione chiamata basta indicare che il parametro è un array senza specificarne la dimensione void miaFunzione(int vettore[])
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  3. #3

    Re: [C] array

    Originariamente inviato da rikyxxx
    Agli esperti di C vorrei chedere un paio di cose:

    1)si possono dichiare in C array aperti (che non siano di caratteri, ma di interi per esempio)??? Se si,come???
    Cos'è un array aperto?

  4. #4
    Utente bannato
    Registrato dal
    Jul 2002
    Messaggi
    99
    Prima di tutto grazie delle risposte

    Un array aperto è un array senza dimensione predefinita, così:

    int vett[ ];

    E' corretta in C questa dicharazione???

    Se sì, esiste una procedura predefinita che mi dica quanti elemeti contine l'array stesso (tipo "strln" per gli arry di caratteri, cioè le stringhe)???

  5. #5
    Originariamente inviato da rikyxxx
    Prima di tutto grazie delle risposte

    Un array aperto è un array senza dimensione predefinita, così:

    int vett[ ];

    E' corretta in C questa dicharazione???
    No

    Originariamente inviato da rikyxxx
    Se sì, esiste una procedura predefinita che mi dica quanti elemeti contine l'array stesso (tipo "strln" per gli arry di caratteri, cioè le stringhe)???
    sizeof (array) / sizeof (tipo_var)

  6. #6
    Utente bannato
    Registrato dal
    Jul 2002
    Messaggi
    99
    Scusa se approfitto ancora di te, però questo programma:

    ----------

    #include <stdio.h>

    int vett[10];

    int ArraySize (int v[])
    {
    return (sizeof(v)/sizeof(int));
    }

    main()
    {
    int i;
    for (i=0; i<10; i++)
    vett[i]=i;
    printf("%d",ArraySize(vett));
    scanf("%d");
    }

    ------------

    Mi da come output 1, non 10.

    COme mai???

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2001
    Messaggi
    167
    Originariamente inviato da rikyxxx
    Scusa se approfitto ancora di te, però questo programma:

    ----------

    #include <stdio.h>

    int vett[10];

    int ArraySize (int v[])
    {
    return (sizeof(v)/sizeof(int));
    }

    main()
    {
    int i;
    for (i=0; i<10; i++)
    vett[i]=i;
    printf("%d",ArraySize(vett));
    scanf("%d");
    }

    ------------

    Mi da come output 1, non 10.

    COme mai???
    Ti dà 1 perchè dividi sizeof(v)/sizeof(int)
    4/4 = 1
    cosa volevi fare ?

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2001
    Messaggi
    167
    Scusa, avevo letto di fretta il tuo thread.
    Il problema è che quando passi un array ad una funzione la funzione non può conoscere la dimensione dell'array.
    Nel tuo caso sizeof(v) è 4 perchè 4 bytes è la dimensione di un puntatore e v, il nome di un array, è appunto un puntatore (quindi hai ottenuto 4/4 = 1). Se vuoi conoscere nella funzione la dimensione dell'array devi appunto passarla alla funzione, come secondo parametro (in questo caso la funzione deve essere richiamata così: ArraySize(vett,10))
    A quel punto all'interno di ArraySize se vuoi ottenere il valore che cerchi devi scrivere return (sizeof(v[0])*n/sizeof(int)); dove sizeof(v[0]) rappresenta la dimensione di un elemento dell'array e n è appunto il secondo parametro(nel tuo caso 10) che hai passato, cioè il numero di elementi dell'array.

  9. #9
    Utente bannato
    Registrato dal
    Jul 2002
    Messaggi
    99
    Ti ringrazio moto per l'aiuto, però ho risolto mettendo le parentesi così:

    int ArraySize (int v[])
    {
    return ((sizeof(v))/(sizeof(int)));
    }

    e mi ritona 10, cioè l'esatta lunghezza dell'array.

    Praticamente c'era un problema di priorità tra operatori.

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2001
    Messaggi
    167
    ???

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.