Я использую следующий макрос для вычисления размера массива:
#define G_N_ELEMENTS(arr) ((sizeof(arr))/(sizeof(arr[0])))
Однако я вижу несоответствие в значении, вычисленном им, когда я оцениваю размер массива в функции (неверное вычисляемое значение), в отличие от того, где вызывается функция (правильное значение вычисляется). Код + вывод ниже. Любые мысли, предложения, советы и др. приветствуется.
ДП
#include <stdio.h>
#define G_N_ELEMENTS(arr) ((sizeof(arr))/(sizeof(arr[0])))
void foo(int * arr) // Also tried foo(int arr[]), foo(int * & arr)
// - neither of which worked
{
printf("arr : %x\n", arr);
printf ("sizeof arr: %d\n", G_N_ELEMENTS(arr));
}
int main()
{
int arr[] = {1, 2, 3, 4};
printf("arr : %x\n", arr);
printf ("sizeof arr: %d\n", G_N_ELEMENTS(arr));
foo(arr);
}
Вывод:
arr : bffffa40
sizeof arr: 4
arr : bffffa40
sizeof arr: 1