Newsgroup: it.comp.lang.c
Titolo: funzione che restituisce il num di elementi dell'array.......

come faccio dato un array ad averne la dimensione?
Nel caso delle stringhe è facile perchè basta contare i 
char prima di \0..
per gli altri tipi di dati?
L'ideale sarebbe una funzione che restituisce la grandezza anche di
array di struct presonalizzate...
NM

come faccio dato un array ad averne la dimensione?
L'operatore sizeof non va bene ?

 ha scritto nel messaggio
news:3ce167a5...@news.tiscalinet.it...

In generale, se l'array è allocato staticamente, l'operatore sizeof ritorna
la dimensione in bytes dell'array, quindi per sapere il numero di elementi
basta fare sizeof(array)/sizeof(tipo). Se invece l'array è allocato
dinamicamente, allora non hai modo di ottenere la dimensione dell'array a
posteriori, a meno che non usi qualche trucchetto per individuare l'ultimo
elemento.
ciao,
Cecco
---------
Visit: 
www.sourceforge.net/projects/dlab
Home Page: 
http://dlab.sourceforge.net/
Dlab-developer mailing list
https://lists.sourceforge.net/lists/listinfo/dlab-developer

Non restituisce i byte?
NM



beh vero!
ma se sai quanti byte occupa un int pittosto che un char poi ti regoli di
conseguenza, ossia dividi il tutto per la dimensione del tipo di dato preso
in considerazione!
es:
int = 2 byte
...
int array[20];
char dim;
dim = sizeof(array) / 2 /*numero dei byte per l'int */
...

...
Riformulala cosi':
<CODE>
sizeof(array) / sizeof(int)
</CODE>
Purche' l'array non sia decaduto a puntatore al primo elemento,
ovviamente.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 ovviamente.
potresti spiegare un po + terra terra?
ciao e grazie

potresti spiegare un po + terra terra?
Vettori e puntatori (al contrario di quello che sostiene il mio prof
:-() sono cose diverse, ma in alcuni casi si dice che un vettore
"decade a puntatore", cioč non puň piů essere considerato un vettore
ma č un puntatore, quindi la sizeof non restituisce piů le dimensioni
di tutto il vettore ma la dimensione di un singolo puntatore, guarda
quest'esempio:
#include <stdio.h>
void f(char vett[]){
    printf("%d\n", sizeof vett);
}
int main(){
    char vett[10];
    printf("%d\n", sizeof vett);
    f(vett);
    return 0;
}
Il programma stampa:
10
4
Il 10 indica lo spazio in byte occupato da tutto il vettore, il 4
quello occupato da un putatore, infatti il passaggio di un vettore ad
una funzione č uno di quei casi un cui un vettore decade a semplice
puntatore.
L'argomento dei vettori che decadono a puntatore č stato spiegato piů
volte sul gruppo, se vuoi saperne di piů prova a cercare con Google
(mi ricordo in particolare alcuni messaggi molto chiari di Andrea
Laforgia).
-- 
Marco Barisione (ICQ 84277092)

Laforgia).
L'ultimo post in tema era questo, ad opera di Andrea Laforgia in
risposta a me.
+++
L'array decade *sempre* nel puntatore al primo elemento,
*meno* che in tre casi specifici: quando e' argomento di
sizeof, quando e' argomento di & (operatore address-of) e
quando e' un literal string di inizializzazione di un
vettore.
3)
char *p = "andrea";
a p viene assegnato un indirizzo di memoria, tant'e' vero 
che non e' neanche detto tu possa modificare il contenuto 
della memoria puntata da p.
Invece, nel caso di:
char a[] = "andrea";
stai assegnando 7 elementi (compreso il NUL finale) uno a uno 
al vettore.
Nel primo caso, il vettore "andrea" decade nel puntatore
al suo primo elemento, nel secondo caso invece diventa 
{'a','n','d','r','e','a','\0'} e l'assegnazione viene compiuta,
quindi, elemento per elemento.
+++
