Я очень смущен тем, что происходит. Я всегда думал, что char *
и char []
являются взаимозаменяемыми, но после просмотра адресов памяти кажется, что char *
выделяет пространство в куче, тогда как char []
выделяет память в стеке.
char stack[] = "hello";
char *heap = "hello";
char *heap_string_malloc = malloc(5);
heap_string_malloc = "hello";
printf("Address of stack[0]: %p\n", stack);
printf("Address of heap[0]: %p\n", heap);
printf("Address of heap_string_malloc[0]: %p\n", heap_string_malloc);
Выводит следующее:
Address of stack[0]: 0x7fff8b0b85b0
Address of heap[0]: 0x400760
Address of heap_string_malloc[0]: 0x400760
Означает ли это, что char *
динамически распределяется?
В дополнение к моей путанице, как получилось, что malloc
выделяет тот же адрес памяти, что и выделенный char *heap
? У меня нет оптимизации (просто gcc file.c
).