在C中,像这样声明一个char指针
char* p="Hello";为字符串文字Hello\0分配一些内存。当我之后这样做的时候
p="FTW";分配给Hello\0的内存发生了什么变化?P指向的地址是否已更改?
发布于 2012-05-16 15:47:45
这两条语句中都没有动态内存分配。
这些字符串存储在您的可执行文件中,加载在内存的一个(可能是只读的)部分中,该部分将与您的进程一样存在。
第二个赋值只更改p所指向的内容。没有其他的事情发生。
发布于 2012-05-16 15:48:21
内存仍由"Hello"占用。它会丢失(除非您有其他对它的引用)。
当然,更改了p指向的地址(p的值)。
发布于 2012-05-16 15:48:41
在本例中,"Hello“是在编译时创建的,是二进制文件的一部分。在大多数情况下,"Hello“存储在只读存储器中。"FTW“也是二进制文件的一部分。第二次赋值只会改变指针。
https://stackoverflow.com/questions/10614118
复制相似问题