代码之家  ›  专栏  ›  技术社区  ›  Galaxy

当char数组从字符串文本初始化时会发生什么?

  •  4
  • Galaxy  · 技术社区  · 6 年前

    char* cptr = "Hello World";
    

    .rodata "Hello World"

    0x4 : 'H'
    0x5 : 'e'
    0x6 : 'l'
    0x6 : 'l'
    0x7 : 'o'
    0x8 : ' '
    0x9 : 'W'
    0xa : 'o'
    0xb : 'r'
    0xc : 'l'
    0xd : 'd'
    0xe : '\0'
    

    因此,上述声明变成:

    char* cptr = 0x4;
    

    0xa1 : 0x4
    

    char cString[] = "Hello World";
    

    char cString[] = 0x4;
    

    = strcpy()

    0xb4 : 'H'
    0xb5 : 'e'
    0xb6 : 'l'
    0xb6 : 'l'
    0xb7 : 'o'
    0xb8 : ' '
    0xb9 : 'W'
    0xba : 'o'
    0xbb : 'r'
    0xbc : 'l'
    0xbd : 'd'
    0xbe : '\0'
    

    .罗达塔

    char* cptr = "Hello World";
    char cString[] = cptr;
    

    计算其基地址, 0x4

    char* cptr = 0x4;
    char cString[] = 0x4;
    

    char cString[] = "Hello World";

    error: invalid initializer
    char cString[] = cptr;
                     ^
    
    3 回复  |  直到 6 年前
        1
  •  5
  •   M.M    6 年前

    = T x = y; T x; x = y; .

    为什么规则是这样的?”历史原因”。

        2
  •  3
  •   Sergey Kalinichenko    6 年前

    "Hello World" 'H' 0x4 .

    cString[] 在内存中获取一个全新的地址。编译器分配12 char

    我想 0x4个

    cString 转换 char* sizeof(cString)

    为什么不能使用char指针作为临时占位符来存储字符串文本的基地址?

    char * 至少在编译器方面,它不再是字符串文字。它变成了 指针,与其他指针一样 指针。

    #define HELLO_WORLD "Hello World"
    ...
    char* cptr = HELLO_WORLD;
    char cString[] = HELLO_WORLD;
    

        3
  •  3
  •   chqrlie    6 年前

    char cString[] = "Hello World";

    char cString[12] = { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0' };
    

    static cString .data