C размер символа * массив - PullRequest
       12

C размер символа * массив

28 голосов
/ 13 октября 2009

У меня есть массив char* следующим образом:

char *tbl[] = { "1", "2", "3" };

Как мне использовать оператор sizeof для получения количества элементов массива, здесь 3?

Ниже работает, но правильно ли?

int n = sizeof(tbl) / sizeof(tbl[0]) 

Ответы [ 3 ]

35 голосов
/ 13 октября 2009

Да,

size_t n = sizeof(tbl) / sizeof(tbl[0])

- наиболее типичный способ сделать это.

Обратите внимание, что использование int для размеров массивов - не лучшая идея.

14 голосов
/ 13 октября 2009

Более короткая и, возможно, более чистая версия будет выглядеть как

sizeof tbl / sizeof *tbl

:)

2 голосов
/ 07 августа 2013

Да, он даст вам количество элементов в массиве tb1.

int n = sizeof(tbl) / sizeof(tbl[0])

Интерпретация:

sizeof (tb1) даст размер всего массива, т.е. tb1 = 3 байта

sizeof (tb1 [0]) дает размер символа, так как tb1 [0] дает значение символа (значение по адресу tb1 + 0) = 1 байт

Разделение этих двух даст вам 3 элемента

...