Можно создать дубликат:
length of array in function argumentКак получить длину массива указателей C?
Есть ли способ, как Java может .Length из массива точек C? Спасибо.
Можно создать дубликат:
length of array in function argumentКак получить длину массива указателей C?
Есть ли способ, как Java может .Length из массива точек C? Спасибо.
Нет, с учетом указателя C вы не можете определить его длину в агностической манере платформы.
Для фактического массива C, хотя см dirkgently это answer
Вы можете получить его с помощью макроса:
#define sizeofa(array) sizeof array/sizeof array[ 0 ]
тогда и только тогда, когда массив является автоматическим, и вы к нему доступ в сферу его определения как:
#include <stdio.h>
int main() {
int x[] = { 1, 2, 3 };
printf("%zd\n", sizeofa(x));
return 0;
}
Однако, если у вас есть только (гнилой) указатель вы не можете получить длину массива, не прибегая к некоторым непортабельному реализации специфический взлом.
«% z» ?? что вы имеете в виду? – user411313
* z * _ Указывает, что следующий спецификатор преобразования d, i, o, u, x или X применяется к аргументу 'size_t' или соответствующему символу со знаком целочисленного типа; или что следующий указатель преобразования n применяется к указателю на целочисленный тип со знаком, соответствующий аргументу size_t. – dirkgently
Этот макрос требует гораздо больше скобок, чтобы избежать общих проблем с макросами. –
Если вы используете MSVC/MinGW есть непереносимые решение для реального C-указатель:
#include <malloc.h>
char *s=malloc(1234);
#ifdef __int64
printf("%lu\n", _msize(s));
#else
#endif
Для реального C-массив как
AnyType myarray[] = {...};
или
AnyType myarray[constVal];
см. Другой ответ.
Вопрос не очень ясен; Вы всегда можете получить длину массива, если его определение локально в области ;-) – dirkgently
@ dirkgently, я согласен, неясно, спрашивают ли они длину указателя или длину массива. Я перенаправил их на ваш ответ для последнего – JaredPar