C 字符字符串*与字符字符串[]

C 字符字符串*与字符字符串[],c,C,以下两者之间是否有区别: char string = "name"; const char* point = string; vs 请你也解释一下区别好吗?好的 第一个简单地指向内存的只读部分,声明实际上应该是: const char* string = "name"; 第二个创建一个足够长的数组来保存字符串“name”(因此,四个字符加上一个空终止符)并将字符串复制到分配的空间中。是 #include <stdio.h> int main(int argc, const ch

以下两者之间是否有区别:

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

请你也解释一下区别好吗?

好的

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

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

#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;
}
第一个简单地指向内存的只读部分,声明实际上应该是:

const char* string = "name";
第二个创建一个足够长的数组来保存字符串
“name”
(因此,四个字符加上一个空终止符)并将字符串复制到分配的空间中
#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;
}
int main(int argc,常量字符**argv) { const char*a1=“你好”; 常量字符a2[]=“你好”; 字符*b1; char*b2; b2=(字符*)a2; *b2=‘c’; 看跌期权(b2); b1=(字符*)a1; *b1=‘c’; 看跌期权(b1); 返回0; } b2将正确显示“大提琴”。 b1将导致分段故障

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

我希望我没有把事情搞砸

此外,编译器可以通过识别某些东西是在文本段上声明的,但在代码中被访问,从而神奇地使其无效,因此C有时会流行起来,并将声明更改为数据段 int main(int argc,常量字符**argv) { const char*a1=“你好”; 常量字符a2[]=“你好”; 字符*b1; char*b2; b2=(字符*)a2; *b2=‘c’; 看跌期权(b2); b1=(字符*)a1; *b1=‘c’; 看跌期权(b1); 返回0; } b2将正确显示“大提琴”。 b1将导致分段故障

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

我希望我没有把事情搞砸


此外,编译器可以通过识别某些东西是在文本段上声明的,但是在代码中访问的,从而神奇地使其无效,因此C有时会流行起来,并将声明更改为数据段。首先,
char string=“name”
不是有效的C。首先,
char string=“name”
不是有效的C。