(Untitled)

Nov 24, 2012 00:31

Ребята, объясните неучу, почему у

#define count(x) (sizeof(x) / sizeof(x[0]))
#include
#include

ulong size(arr)
int arr[];
{
return count(arr);
}

int main(int argc, char **argv)
{
int a[] = {3,5,4,6,5,1,5};
printf("%lu\n", count(a));
printf("%lu\n", size(a));
return 0;
}

такой вывод:
7
2

Leave a comment

Comments 13

kirkucherenkov November 24 2012, 21:11:20 UTC
система 64-битная?

в функцию передается длинный указатель ( 64-бита, 8 байт) указывающий на 32-битый инт.
т.о., в функции size происходит вычисление 8/4 = 2
отсюда и результат.

Массив в Си ничем и никак не ограничен.

Reply

besuhoff November 24 2012, 22:20:13 UTC
что массив не ограничен, я знаю
а про указатель не понял - это ведь не int *arr, или не важно?

как исправить код, чтобы работало?

Reply

kirkucherenkov November 24 2012, 22:27:22 UTC
int arr[] === int* arr
имя массива - это _всегда_ указатель на первый элемент.

А вот как починить - сейчас буду подумать

Reply

besuhoff November 24 2012, 22:34:58 UTC
тогда почему в первом случае всё работает правильно? ведь там тоже указатель

Reply


Leave a comment

Up