Можно ли получить размер массива указателей на функции, как обычные массивы? - PullRequest
0 голосов
/ 06 мая 2019

Попытка получить размер массива указателей на функции с помощью приведенного ниже кода приводит к ошибке компиляции.Пожалуйста, подтвердите, возможно ли получить размер, как обычный массив.

   int (*fptr[])(int) = { get_square, get_cube, get_square_root };

   printf("\nsize = %d", sizeof((*fptr[])(int)));

Ответы [ 2 ]

2 голосов
/ 06 мая 2019

Вы не можете sizeof неограниченный массив.Вы хотите sizeof(fptr)/sizeof(fptr[0]), как указал Евгений в комментариях.

0 голосов
/ 07 мая 2019

Вы можете вычислить размер массива указателей на функции, как и любой другой массив:

  • размер в байтах sizeof(fptr) или просто sizeof fptr
  • количество элементов sizeof(arr) / sizeof(arr[0]).

Остерегайтесь, однако, что sizeof оценивает (во время компиляции) значение типа size_t, которое отличается от int. Чтобы напечатать это, используйте:

    int (*fptr[])(int) = { get_square, get_cube, get_square_root };

    printf("size = %zu bytes\n", sizeof fptr);
    printf("size = %zu elements\n", sizeof(fptr) / sizeof(fptr[0]));

Или, возможно, приведение к unsigned, если ваша библиотека C не поддерживает модификаторы размера C99:

    printf("size = %u bytes\n", (int)sizeof fptr);
    printf("size = %u elements\n", (int)(sizeof(fptr) / sizeof(fptr[0])));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...