Why then would the following string not be deleted when the void loop() exits and returns:
Would it make any difference if it was? The loop() function gets called again, and the string is needed again.
I'm just confused about how the Serial.print() function operates when you give it a string directly.
The compiler makes a pass through your code, and finds all constant strings, among other things, and places them at specific locations in SRAM. The call is then changed to print the string at that address. It does this for all constant strings, not just those used by Serial.print().
So would there be a difference between the above code, and the following code concerning how the 'string' array is saved (or deleted from memory).
No. The compiler is smart enough to do what that code sample does, for all strings. You can look at the assembler output for the two cases. I think that you'll find that they are very similar, if not identical. Different addresses, perhaps, in SRAM, but the same result - the Serial.print() function is called with the address where the string to print is stored.
Would this code clear the character array to_print from memory after the loop() function has finished executing?