@H1M4W4R1, o jakim koszcie operacyjnym mówisz? sizeof będzie wyliczony na etapie kompilacji jeżeli rozmiar obiektu jest znany na etapie kompilacji. Dla VLA sizeof() jest ewaluowany na etapie wykonania. Dla mnie zawsze lepiej użyć sizeof niż define na sztywno. Podane przez @_LM_ sizeof(tab) / sizeof(tab[0]) mam zawsze pod ręką jako makro
#define NELEMS(a) (sizeof(a) / sizeof(a[0]))
Lepiej w ten sposób uniezależnić się od zmiany typu w tablicy jeżeli interesuje nas tylko ilość elementów, a nie rozmiar.
@_LM_ Jak w zależności "od czegoś" będziesz zmieniał kilka parametrów (wskaźnik na dane, ich rozmiar i jakaś funkcja) to proponuję ubrać sobie ten zestaw danych w strukturę i może nawet typedef na strukturę z jakąś sensowną nazwą. Z jakiegoś powodu te dane są powiązane ze sobą logicznie wiec w kodzie też łatwiej będzie je upilnować zamknięte w jedną strukturę. Nie musisz pamiętać, żeby w zależności "od czegoś" podmieniać kilka różnych parametrów tylko podmienisz całą strukturę.
EDIT:
Standard C11, 6.5.3.4 2