Чтобы получить желаемый результат, вы не хотите использовать какое-либо назначение.Назначение, как вы, возможно, уже знаете, относится к установке одного фрагмента памяти равным другому.Другими словами, копирование.Все эти три строки в вашем коде являются присваивающими и вызывают создание копий:
int temp = array[start][i];
array[start][i] = array[end][i];
array[end][i] = temp;
Следующий метод потребует, чтобы ваш строковый массив был определен следующим образом:
char** array = {
"I am human",
"hello world",
"et is real",
"i am the knight"
};
Поскольку всеВы хотите распечатать содержимое в обратном порядке, вам просто нужно начать с конца строки и вернуться обратно к началу строки.Если это ваша функция печати
void printStrings(char** array, int start, int end)
{
while(start!=end)
{
printf("%s\n",array[start]);
++start;
}
}
Вы бы назвали это так, чтобы напечатать строки в обычном порядке:
printStrings(array,0,3);
Или
printStrings(array,0,sizeof(array)-1);
И чтобыраспечатайте его в обратном порядке, вам потребуется другая функция:
void printStringsReverse(char** array, int end, int start)
{
while(end!=start)
{
printf("%s\n",array[end]);
--end;
}
}
И вы бы назвали эту функцию следующим образом:
printStringsReverse(array,3,0);
или
printStringsReverse(array,sizeof(array)-1,0);
Нет назначения не требуется.Копии не сделаны.Нет malloc
используется.Вы просто печатаете то, что уже есть, поэтому вам не нужно ничего перемещать.Есть, конечно, много способов, которыми вы могли бы написать эти функции.На самом деле есть способ, которым вы могли бы написать обе функции, чтобы они были просто одной функцией.Но это простой метод, который будет иметь очень мало накладных расходов.