Как передать массив в функцию и вернуть исходный массив, после сортировки?
Во-первых, не нужно разделять PrintArray и SourceArray. Код у них один и тот же.
Во-вторых, массив передается в BubbleSort по указателю, то есть, если BubbleSort меняет массив, то он меняется вообще.
Вам нужно перед вызовом BubbleSort скопировать массив, и в функцию передать копию. Например:int array_copy[size];
memcpy(array_copy, array, size);
Если я тебя правильно понял:
создаёшь новый дин. массив, копируешь в него значения, сортируешь его, выводишь, потом освобождаешь память, и всё.