Как найти количество байтов, используемых указателем? - PullRequest
3 голосов
/ 21 июня 2010

У меня есть указатель (uint8_t * myPointer), который я передаю в качестве параметра методу, а затем этот метод устанавливает значение для этого указателя, но я хочу знать, сколько байтов используется (указано?)Переменная myPointer.

Заранее спасибо.

Ответы [ 4 ]

11 голосов
/ 21 июня 2010

Размер указателя: sizeof(myPointer) (равно sizeof(uint8_t*))
Размер указателя: sizeof(*myPointer) (равно sizeof(uint8_t))

Если вы имели в виду, что это указываетк массиву, нет никакого способа узнать это.Указатель просто указывает и не заботится о том, откуда взято значение.

Чтобы передать массив через указатель, вам также необходимо передать размер:

void foo(uint8_t* pStart, size_t pCount);

uint8_t arr[10] = { /* ... */ };
foo(arr, 10);

Вы можете использоватьшаблон, облегчающий прохождение всего массива:

template <size_t N>
void foo(uint8_t (&pArray)[N])
{
    foo(pArray, N); // call other foo, fill in size.
    // could also just write your function in there, using N as the size
}

uint8_t arr[10] = { /* ... */ };
foo(arr); // N is deduced
3 голосов
/ 21 июня 2010

Вы не можете.Вы должны сами передать размер буфера, на который указывает указатель.

0 голосов
/ 21 июня 2010

Полагаю, вы имеете в виду память, необходимую только для указателя.Вы можете проверить это во время компиляции с sizeof(myPointer).

0 голосов
/ 21 июня 2010

Вы не можете. Если массив не создается во время компиляции. Пример int test[] = {1, 2, 3, 4}; В этом случае вы можете использовать sizeof(test), чтобы вернуть вам правильный размер. В противном случае невозможно определить размер массива без сохранения собственного счетчика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...