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 namedaat 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 whetherxis 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