定义字符指针并初始化,指针变量所指向的字符串存在哪个地方呢?该怎么解决

定义字符指针并初始化,指针变量所指向的字符串存在哪个地方呢?
定义字符指针并初始化,指针变量所指向的字符串存在哪个地方呢?
char *p="the world",此时变量会在内存中占4个字节,可是“the workd”这个字符串存在哪里呢?
----------------------------------------------------
因为p是一个指针变量,它在内存中占4个字节,它指向的是字符串“the world”的首地址,
我不明白的是,这个字符串存在哪里呢?这个字符串的地址是什么呢?

我先用定义一个整型作为例子,问问二者的区别。
int a=10;
就是定义一个整型变量 a ,这个变量在内存中占用4个字节,而且存在的内容就是 10 本身。这个很好理解,但是定义字符指针就不同了。
内存中存的是指针。但是它所指向的内容存在哪里呢?

这个字符串如果也存在内存中, 那么它的地址是什么呢?
虽然初始化时,p指向这个字符串,但是p随时可以指向别的位置,那么“the world”这几个字符串就会成为孤点了。


------解决方案--------------------
直接定义的"the world"实际类型是const,也就是常量,它在常量存储区
------解决方案--------------------
其实就是相当于一个数组,p指向这个数组的首地址
剩余的几个字母按首地址连续存放
不管P指向哪,这个字符串在内存中的位置都不会变,直到程序结束,因为他们存放在常量存储区
------解决方案--------------------

这个有点类似的宾馆住房。

比如宾馆住房接待处,有一本记录本,记录着房客的房间号。假如在第一行写着一个房间号,后面跟着住房人的名字。这样通过房间号就可以间接找到房客。这里的房间号只是个地址,而这个地址指向房客的住处。
char *p="the world",定义这个字符串的时候,系统会为变量分配一块内存,而这块内存的首地址放在p中,通过p就可以访问字符串了。

------解决方案--------------------
指针还是可以指向他处的,只要你给不同的内存首地址。
------解决方案--------------------
探讨
引用:
直接定义的"the world"实际类型是const,也就是常量,它在常量存储区

但是指针如果指向别的字符串一次,这个最初的字符串就会找不到了,因为它本身没有地址呀。
也就是说,它白白地在内存占据空间,但是没有办法引用它了。(前提是,指针已经指向别的字符串时)