Вы не выделили t
, поэтому strcpy(t,names[i])
перестанет работать.
Вы также можете использовать strdup()
1 для дублирования ваших строк (вместо malloc()
и strcpy()
).
И, так как ваш массив состоит из char*
элементов, вы можете просто поменять их местами напрямую:
t=names[i];
names[i]=names[j];
names[j]=t;
Что касается вашего вопроса об указателях, вы можете рассматривать указатели как uint32_t
: это «просто» значения, которые вы можете назначить, как обычные целые числа. Это просто их значение, которое интерпретируется как адрес, а не случайное целое число (т.е. его значение имеет особое значение для компьютера, поскольку оно тесно связано с памятью).
1 : Как отмечает @WhozCraig, strdup()
является , а не частью стандартной библиотеки, поэтому вам потребуется #include
соответствующих заголовков для вашей платформы (это хотя и широко распространен и вряд ли является проблемой).