char s[]和char*s之间有什么区别?

在C中,可以在如下声明中使用字符串文字:

chars[]=“你好”;

或者像这样:

char*s=“你好”;

那么有什么区别呢?我想知道在编译时和运行时,在存储持续时间方面实际发生了什么

这里的区别是

char*s=“你好世界”;

将把“Hello world”放在内存的只读部分,并使s成为指向该内存的指针,从而使该内存上的任何写入操作都是非法的

在这样做时:

chars[]=“你好,世界”;

将文本字符串置于只读内存中,并将字符串复制到堆栈上新分配的内存中。从而使

s[0]='J';

合法的

发表评论