No. 1 refers to this:
Code:
char string[]="this and that";
int i=0;
while (string[i]!='\0') {
...etc.
the "array subscript" is the [bracketed element number].
No. 2 is this kind of stuff
Code:
char string[]="this and that";
char *ptr=string;
int dif;
while (ptr!='\0') { ptr++; }
dif=ptr-string;
See? Pointer arithmetic. Memory addresses are in bytes, which are equal to one char, so for example the address "&string[1]" will be one integer value higher than "*string" itself.
I am pretty sure this is guaranteed by the compiler. Positive actually.