As the heading says, What is the difference between
char a[] = ?string?; and
char *p = ?string?;
This question was asked to me in inter
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 namea
. That is, there is a location nameda
at which six characters can sit. The pointer declarationchar *p;
on the other hand, requests a place which holds a pointer. The pointer is to be known by the namep
, and can point to any char (or contiguous array of chars) anywhere.The statements
char a[] = "string"; char *p = "string";
would result in data structures which could be represented like this:
+---+---+---+---+---+---+----+ a: | s | t | r | i | n | g | \0 | +---+---+---+---+---+---+----+ +-----+ +---+---+---+---+---+---+---+ p: | *======> | s | t | r | i | n | g |\0 | +-----+ +---+---+---+---+---+---+---+
It is important to realize that a reference like
x[3]
generates different code depending on whetherx
is an array or a pointer. Given the declarations above, when the compiler sees the expressiona[3]
, it emits code to start at the locationa
, move three elements past it, and fetch the character there. When it sees the expressionp[3]
, it emits code to start at the locationp
, fetch the pointer value there, add three element sizes to the pointer, and finally fetch the character pointed to. In the example above, botha[3]
andp[3]
happen to be the characterl
, but the compiler gets there differently.
Source: comp.lang.c FAQ list · Question 6.2