char x[]
- это то же самое, что и char* x
, поэтому sizeof(x)
- это размер указателя. Поэтому, поскольку вы не можете вычислить размер массива вне блока, в котором он объявлен, я исключил бы эту часть из вашей функции.
Было бы намного проще снабдить функцию указателями на первый и последний заменяемые символы:
void reverse(char* pStart, char* pEnd)
{
while (pStart < pEnd)
{
char temp = *pStart;
*pStart = *pEnd;
*pEnd = temp;
pStart++;
pEnd--;
}
}
Так что теперь эту функцию довольно легко вызвать - взять адрес (используя амперсанд &
) соответствующих символов в массиве: &text[0]
и &text[4]
.
Для отображения массива символов существует правило, что такие "строки" ДОЛЖНЫ иметь после последнего символа НУЛЕВЫЙ символ. NULL-символ может быть записан как 0
или '\0'
. Вот почему он должен быть добавлен в массив здесь.
int main()
{
// char text[] = "hello"; // Same like below, also adds 0 at end BUT !!!in read-only memory!!
char text[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
reverse(&text[0], &text[4]);
std::cout << text << std::endl;
return 0;
}