Зан близок, но его проблема в том, что его функция 'swap' может принимать любой указатель на символы. Это может вызвать проблемы при неправильном использовании. Вот более безопасная версия:
void swap(char (&x)[MAX2], char (&y)[MAX2])
{
char temp[MAX2];
memcpy(temp, x, MAX2);
memcpy(x, y, MAX2);
memcpy(y, temp, MAX2);
}
Существует также недоразумение со стороны автора плаката: «nm» - это двумерный массив символов. Там нет указателей. nm [0], nm [2] и т. д. ... также не являются указателями - они по-прежнему (одномерные) массивы. Тот факт, что одномерные массивы неявно преобразуются в указатели, вызывает путаницу среди программистов на C и C ++.
Чтобы поменять местами данные в 2-мерном массиве, вам нужно поменять местами блоки памяти размера MAX2 - как указано в обеих функциях 'swap', написанных нами и Заном.