我有以下与C语言相关的问题:
char *p="Harish"
存储在.rodata
段?int *p=90
存储在堆栈中?答案 0 :(得分:4)
执行此操作时:
char *p = "Harish";
您正在执行以下操作:
p
。"Harish"
的地址。该字符串必须存储在函数退出时不会消失的地方,因此它存储在只读数据段中(它是一个常量字符串,因此它不需要是可写的)。相比之下,当你这样做时:
int *p = 90;
你只是创建一个指针,但没有指向它的任何东西。您只是将指针设置为指向地址90
。与上面的情况一样,指针位于堆栈中。没有任何内容进入.rodata
段,因为声明不会创建任何指向它的内容。
答案 1 :(得分:0)
char *p="Harish"
在上面的行中,“Harish”存储在共享的只读位置。但是指针p存储在读写存储器中。您可以将p更改为指向其他内容,但目前无法更改值p。所以这种字符串只应在我们不想在程序的后期修改字符串时使用。