Начиная с сигнатуры метода или его прототипа, он многое говорит о том, как он работает: у нас есть два параметра вместе с их соответствующими типами и типом возвращаемого значения.Все параметры в этом случае являются указателями на символ, более известный как указатель на символ.Эти символьные указатели - это то, что используется в «C» как строки символов.Один параметр является константным, потому что это значение не должно быть изменено в функции, оно ДОЛЖНО сохранять исходное значение.Строки в «C» имеют некоторые особенности: после создания указателя на строку он всегда указывает на первые символы в строке или индексе 0, так же, как char * v = var [0], и его можно увеличивать, передавая вследующий символ в строке, такой как v ++.Другая особенность в "C" заключается в том, что все строки, представленные массивами символов, заканчиваются символом 0 (ASCII null = 0).
Версия strcpy учитывает эти концепции и создает цикл for для копирования каждого элемента вchar * cad2 - * cad1, переменные ДОЛЖНЫ быть размещены статически или динамически (malloc) перед вызовом функции, а возвращение функции в приведенном выше коде является указателем на исходную переменную (в этом случае * cad1, обычно они возвращаютскопированный).В вашей функции она была изменена, я имею в виду, что она возвращает оригинал вместо скопированного, что выглядит неправильно, поскольку вы ловите в aux указатель на первый элемент скопированной переменной, а вы его не использовали.
Хорошим моментом для наблюдения является цикл for:
for( ; *cad1++ = *cad2++; );
Как это работает, хитро, первый интересный момент заключается в том, что цикл for имеет параметры дерева, а в "C" все они необязательны.Первый - инициализация, второй - логическое условие продолжения итерации, а последний - увеличение или уменьшение.Далее, хитро ли является * cad1 ++ = * cad2 ++ логическим выражением?Ответ - да, это так.Так как в «С» значение 0 (ноль) является ложным, а все остальное является истинным.Помните, что я сказал, что строки в «C» всегда заканчиваются 0 (ноль), поэтому при оценке и присвоении копии значение указателя (использование * cad1 вернет значение, указанное переменной указателя, звездочка вbegin делает эту магию) и достигает конца строки, которая вернет false и завершит цикл итерации.Здесь интересен один момент: во-первых, в этом случае оценка имеет меньший приоритет, чем присваивание, в результате чего сначала копируется значение в переменную копирования, а затем вычисляется логическое выражение.
«C» - это как выпишет небольшой код, который имеет большое значениеЯ надеюсь, что вы поняли объяснение.Для получения дополнительной информации смотрите указатели "C" по адресу: https://www.tutorialspoint.com/cprogramming/c_pointers.htm.