I try to google this topic, but no one can explain clear. I try the below code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char * argv[]){
    char * p1 = "dddddd";
    const char * p2 = "dddddd";
    char p3[] = "dddddd";
    char * p4 =(char*)malloc(sizeof("dddddd")+1);
    strcpy(p4, "dddddd");
    //*(p1+2) = 'b'; // test_1
    //Output >>  Bus error: 10
    // *(p2+2) = 'b'; // test_2
    // Output >> char_point.c:11:13: error: read-only variable is not assignable
    *(p3+2) = 'b'; // test_3
    // Output >>
    //d
    //dddddd
    //dddddd
    //ddbddd
    *(p4+2) = 'k'; // test_4
    // Output >>
    //d
    //dddddd
    //dddddd
    //ddbddd
    //ddkddd
    printf("%c\n", *(p1+2));
    printf("%s\n", p1);
    printf("%s\n", p2);
    printf("%s\n", p3);
    printf("%s\n", p4);
    return 0;
}
I have try 3 tests, but only the test_3 and test_4 can pass. I know const char *p2 is read only, because it's a constant value! but i don't know why p1 can't be modified! which section of memory it's layout? BTW, I compile it on my Mac with GCC.
I try to compile it to dis-asm it by gcc -S, I got this.
.section    __TEXT,__text,regular,pure_instructions
.macosx_version_min 10, 13
.globl  _main
.p2align    4, 0x90
_main:                                  ## @main
    .cfi_startproc
## BB#0:
    pushq   %rbp
Lcfi0:
    .cfi_def_cfa_offset 16
Lcfi1:
    .cfi_offset %rbp, -16
    movq    %rsp, %rbp
Lcfi2:
    .cfi_def_cfa_register %rbp
    subq    $48, %rsp
    movl    $8, %eax
    movl    %eax, %ecx
    leaq    L_.str(%rip), %rdx
    movl    $0, -4(%rbp)
    movl    %edi, -8(%rbp)
    movq    %rsi, -16(%rbp)
    movq    %rdx, -24(%rbp)
    movq    %rdx, -32(%rbp)
    movl    L_main.p3(%rip), %eax
    movl    %eax, -39(%rbp)
    movw    L_main.p3+4(%rip), %r8w
    movw    %r8w, -35(%rbp)
    movb    L_main.p3+6(%rip), %r9b
    movb    %r9b, -33(%rbp)
    movq    %rcx, %rdi
    callq   _malloc
    xorl    %r10d, %r10d
    movq    %rax, -48(%rbp)
    movl    %r10d, %eax
    addq    $48, %rsp
    popq    %rbp
    retq
    .cfi_endproc
    .section    __TEXT,__cstring,cstring_literals
L_.str:                                 ## @.str
    .asciz  "dddddd"
L_main.p3:                              ## @main.p3
    .asciz  "dddddd"
.subsections_via_symbols
I want to know every pointer what i declaration, which section is it?
 
     
     
     
    