Вы не можете сделать это в C. Размер указателя равен размеру указателя, а не размеру любого массива, на который может указывать.
Если вы в конечном итогес указателем, указывающим на массив (либо явно с чем-то вроде char *pch = "hello";
, либо неявно с затуханием массива, таким как передача массива в функцию), вам нужно будет отдельно хранить информацию о размере, например:
int twisty[] = [3,1,3,1,5,9];
doSomethingWith (twisty, sizeof(twisty)/sizeof(*twisty));
:
void doSomethingWith (int *passages, size_t sz) { ... }
Следующий код иллюстрирует это:
#include <stdio.h>
static void fn (char plugh[], size_t sz) {
printf ("sizeof(plugh) = %d, sz = %d\n", sizeof(plugh), sz);
}
int main (void) {
char xyzzy[] = "Pax is a serious bloke!";
printf ("sizeof(xyzzy) = %d\n", sizeof(xyzzy));
fn (xyzzy, sizeof(xyzzy)/sizeof(*xyzzy));
return 0;
}
Выходные данные в моей системе:
sizeof(xyzzy) = 24
sizeof(plugh) = 4, sz = 24
, поскольку 24-байтовый массив преобразуется в 4-байтовый указательв вызове функции.