Snippet 1
char a[200],*p;
Defined a block of 200 characters ,a, and a pointer, p, to a block of one or more characters.
gets(a); // cin.get(a,200);
Read some user input into memory block a
p=a;
Points p at block a. p can now be used as a reference to the same thing as a
strcpy(p,p+1);
Copy part of the memory block over itself. NOTE: this invokes undefined behaviour because the to and from buffers in strcpy overlap (See http://en.cppreference.com/w/cpp/string/byte/strcpy). The results may be unusual, ranging from “Looks like it works!” to more fantastic, such as the computer making it rain unicorns.
So, say a is created at memory location 10. Data is read into the block starting at location 10. Then p is set to point at location ten. Then the memory starting at location 11 is copied over the memory starting at location 10. Since a is at 10, printing a prints the altered data. Since p is still pointing at 10, printing p will print the same thing as a.
Snippet 2:
char a[200],*p;
Defined a block of 200 characters ,a, and a pointer, p, to a block of one or more characters.
gets(a); // cin.get(a,200);
Read some user input into memory block a
p=a;
Points p at block a. p can now be used as a reference to the same thing as a
p++;
Moved where p pointed over one slot to the right. Copied nothing. Just changed the address that p points at.
So, say a is created at memory location 10. Data is read into the block starting at location 10. Then p is set to point at location 10. Then p is set to point at memory location 11. The values in memory block a are unchanged. Since a is still at 10, printing a prints the unchanged data. Since p is now pointing at 11, printing p will print the from the second character of a onward.
10
solved How a pointer to a string works in a function?