0

有没有区别:

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

对比

const char string[] = "name";

你也能解释一下区别吗?

4

2 回答 2

5

是的。

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

const char* string = "name";

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

于 2013-02-26T20:14:48.323 回答
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 将正确显示“大提琴”。b1 将导致分段错误。

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

我希望我没有搞砸...

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

于 2013-02-26T20:23:16.610 回答