Difference between char a[]="string"; and char *p="string";
What is the difference between
char a[]="string";
and char *p="string";
?
The first one is array the other is pointer.
The array declaration "
char a[6];
" requests that space for six characters be set aside, to be known by the name "a.
" That is, there is a location named "a
" at which six characters can sit. The pointer declaration "char *p;
" on the other hand, requests a place which holds a pointer. The pointer is to be known by the name "p,
" and can point to any char (or contiguous array of chars) anywhere.
The statements
char a[] = "hello";
char *p = "world";
would result in data structures which could be represented like this:
+---+---+---+---+---+---+
a: | h | e | l | l | o |\0 |
+---+---+---+---+---+---+
+-----+ +---+---+---+---+---+---+
p: | *======> | w | o | r | l | d |\0 |
+-----+ +---+---+---+---+---+---+
It is important to realize that a reference like x[3] generates different code depending on whether x is an array or a pointer.
Given the declarations above, when the compiler sees the expression a[3], it emits code to start at the location "a," move three past it, and fetch the character there. When it sees the expression p[3], it emits code to start at the location "p," fetch the pointer value there, add three to the pointer, and finally fetch the character pointed to.
In the example above, both a[3] and p[3] happen to be the character 'l', but the compiler gets there differently.
Post a Comment