Проблема в следующих строках:
*first=a[0];
*second=a[7];
Я думаю, что вы хотите, чтобы first
и second
указывали на правильные элементы, а именно:
first = &a[0]; // address of the first element
second = &a[7]; // address of the eighth element
То, что у вас есть, это присвоение значения a[0]
адресу, указанному first
, который не инициализирован. Кроме того, вы можете также использовать n - 1
вместо 7, чтобы не указывать размер жестко. Также эти строки:
*c=*first;
*first=*second;
*second=*c;
Видите ли, указатель c
также не был инициализирован. То, что вы должны сделать, не иметь c
в качестве указателя:
char c;
Затем используйте его как обычную переменную:
c = *first;
*first = *second;
*second = c;
И просто примечание к дизайну, вам не нужен счетчик / цикл. Скорее, вы знаете, что вы закончили с second
is <= to <code>first (то есть мы находимся на полпути или уже перешли):
while (second > first)
Наконец, через некоторые пробелы! Ваш код очень сжат и труден для чтения. Не бойтесь разбрасывать вещи.