Well ponter is pretty complicated. So I will leave that part and let your teacher do the job. On the other hand array is pretty simple.
You can see a array as a "cabinet with drawers". in each drawer you can put something in there. Each drawer have a number. The first start at 0.
So in your case means
char string1[20] , string2[]="string literal";
string1 is an char array with length of 20. (a cabinet with 20 drawers).
string2 is an char array with value "string literal".
* a char array means you can only assign 1 char to a index number. In this case size of string2 array will be 15 (remember the 0 terminator).
for( i=0; string1[i] !='\0'; i++)
printf("%c ",string1[i]);
as you can see there we have a for loop. That means the printf command on the second line will repeat over and over again untill the requirement mets on the first line.
On the first line we start with i=0. and than we are looking for string1[ i ] because
i is 0 that means it will look up in the index 0 position of string1. if string1[0] is not \0 we need to do the printf command on the second line and increment
i with 1. So we start all over again with a new
i value untill we find the 0 terminator.
This is what your code do. I hope this will help you.
note * 0 terminator define the end of a string