I just start learning C and found some confusion about the string pointer and string(array of char). Can anyone help me to clear my head a bit?
// source code
ch
I think this will help clear it up also:
int main() {
char* ptr = "Hello";
char arr[] = "Goodbye";
// These both work, as expected:
printf("%s\n", ptr);
printf("%s\n", arr);
printf("%s\n", &arr); // also works!
printf("ptr = %p\n", ptr);
printf("&ptr = %p\n", &ptr);
printf("arr = %p\n", arr);
printf("&arr = %p\n", &arr);
return 0;
}
Output:
Hello
Goodbye
Goodbye
ptr = 0021578C
&ptr = 0042FE2C
arr = 0042FE1C \__ Same!
&arr = 0042FE1C /
So we see that arr == &arr. Since it's an array, the compiler knows that you are always going to want the address of the first byte, regardless of how it's used.
arr is an array of 7+1 bytes, that are on the stack of main(). The compiler generates instructions tho reserve those bytes, and then populate it with "Goodbye". There is no pointer!
ptr on the other hand, is a pointer, a 4-byte integer, also on the stack. That's why &ptr is very close to &arr. But what it points to, is a static string ("Hello"), that is off in the read-only section of the executable (which is why ptr's value is a very different number).