What is the difference between char s[] and char *s?

Viewed 384552

In C, one can use a string literal in a declaration like this:

char s[] = "hello";

or like this:

char *s = "hello";

So what is the difference? I want to know what actually happens in terms of storage duration, both at compile and run time.

14 Answers

An example to the difference:

printf("hello" + 2); //llo
char a[] = "hello" + 2; //error

In the first case pointer arithmetics are working (arrays passed to a function decay to pointers).

char *s1 = "Hello world"; // Points to fixed character string which is not allowed to modify
char s2[] = "Hello world"; // As good as fixed array of characters in string so allowed to modify

// s1[0] = 'J'; // Illegal
s2[0] = 'J'; // Legal
Related