一道改错题解决方案

一道改错题
C/C++ code

#include <stdio.h>
int main(void)
{
    char *s = "Hello";
    printf("%c\n", s[4]);
    s[4] = 'a';
    printf("%s\n", s);
    return 0;
}


乍看上去,这程序没什么问题,可编译后运行,打印出s[4]o后,即提示段错误,跟进程序,发现错误出现在s[4] = 'a'语句中。

想起来,关于指针的一些用法,其中一条即是不能随便修改指针所指向的内容,它的地址是可以改变的,这点与数组相反。数组是可以改变数组内容,但不能改变它的地址。于是乎,对上述程序进行修改,把char *s 修改为char s[]。
C/C++ code

#include <stdio.h>
int main(void)
{
    char *s = "Hello";
    printf("%c\n", s[4]);
    s[4] = 'a';
    printf("%s\n", s);
    return 0;
}



程序正常运行,输出:
o
Hella

一点拙见,不知是否正确?关于指针,似懂非懂,讲起来都知道,但一用就错。还应加强指针这方面的练习。

------解决方案--------------------
第一个在常量区,默认不能改的……
------解决方案--------------------
多错上几次就懂了
------解决方案--------------------
探讨

引用:

第一个在常量区,默认不能改的……

不是因为指针么?把char *s改成char s[]就没问题了。
指针指向一个常量。如果把另一个指针赋值给它,也是不行的。
个人觉得因为指针指向的内容不能修改的问题,这样的理解对么?