char string * vs char string []

时间:2013-02-26 20:13:09

标签: c

之间是否存在差异:

char string = "name";
const char* point = string;

VS

const char string[] = "name";

请您解释一下这个区别吗?

2 个答案:

答案 0 :(得分:5)

第一个只是指向内存的只读部分,声明应该是:

const char* string = "name";

第二个创建一个足够长的数组来保存字符串"name"(因此,四个字符加上一个空终止符)并将字符串复制到分配的空间内。

答案 1 :(得分:0)

#include <stdio.h>

int main(int argc, const char** argv)
{
    const char *a1 = "hello";
    const char a2[] = "hello";
    char* b1;
    char* b2;

    b2 = (char*) a2;
    *b2 = 'c';
    puts(b2);

    b1 = (char*)a1;
    *b1 = 'c';
    puts(b1);


    return 0;
}

b2将正确显示'cello'。 b1会导致分段错误。

这是因为b1存储在代码的文本段中,而b2存储在数据段中。

我希望我没有弄乱它......

此外,编译器可以通过识别在文本段上声明某些内容而使其无效,但是在代码中访问,因此C有时可以捕获,并将声明更改为数据段