C语言字符串字面量池

百度了一下好像没有这个概念,有没有确切的叫法?
里面内存是什么时候分配和释放的
书上不是这样说的哦

C语言的字面量其实是一个字符型的指针.如果这个指针在定义的时候出现了,那么它的生命周期和被赋值的变量一样.如果只是写上去了,但没有使用,那么它只会去CPU过一下, 然后就没了.它上面说的意思就是:
char *p = "abcdefg";
p本身只占4字节, 而且它是一个指针, 所以它是不可能会去保存abcdefg这个字符串的.那这个abcdefg是肯定要有一个地方去保存它, 那就是书上说的字符串字面量池.书上说了, 它可以是一个常量, 所以, 在上述定义后,执行:p[2] = 'd'; 编译不会出错, 但在运行时会出现内存错误. 因为它是只读的.所以一般不建议用上述方法定义, 应该这样:const char *p = "abcdefg";这样如果写code是意外改变它的值, 编译器就会首先报错. 或是就不这样定义, 而是这样:char *p[] = "abcdefg"; 这样p就是一个常量了, 而p就是一个数组名, 也是一个指针. 而它指向的是char型变量, 所以可以改变它的值.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-24
块中的变量在退出块之后释放
全局变量当程序结束时释放
自己用malloc函数分配的堆,要记得调用free函数释放,不然会造成内存泄露,不过退出程序之后都会释放的。
第2个回答  2018-09-04
果然不是我一个人看这本书,,,,,,