Передача массива в качестве параметра функции в C ++ - PullRequest
17 голосов
/ 15 января 2009

В C ++ массивы нельзя передавать просто как параметры. Значение, если я создаю функцию, подобную так:

void doSomething(char charArray[])
{
    // if I want the array size
    int size = sizeof(charArray);
    // NO GOOD, will always get 4 (as in 4 bytes in the pointer)
}

У меня нет возможности узнать, насколько велик массив, поскольку у меня есть только указатель на массив.

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


РЕДАКТИРОВАТЬ: просто дополнение относительно решения. Если массив символов, в частности, был инициализирован так:

char charArray[] = "i am a string";

, тогда \0 уже добавлен в конец массива. В этом случае ответ (помеченный как принятый) работает, так сказать, «из коробки».

Ответы [ 12 ]

0 голосов
/ 19 ноября 2012

Я думаю, вы можете сделать это:

size_t size = sizeof(array)/sizeof(array[0]);

PS: я думаю, что название этой темы тоже не правильно.

0 голосов
/ 18 марта 2009

Вы гарантированно получите 4 на 32-битном ПК, и это правильный ответ. из-за причины, объясненной здесь и здесь . Короткий ответ: вы на самом деле тестируете размер указателя, а не массива, потому что «массив неявно преобразуется или распадается в указатель. Указатель, увы, не хранит размерность массива; даже сказать вам, что рассматриваемая переменная является массивом. "

Теперь, когда вы используете C ++, boost :: array - лучший выбор, чем необработанные массивы. Поскольку это объект, вы не потеряете информацию о размерах.

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