void main()
{
char *p = "hello";
}
P的存储类型和内存中的点(堆栈/数据段)是什么? 字符串“helllo”存储在哪里?
答案 0 :(得分:5)
p是一个局部变量,通常驻留在堆栈上。
字符串存储在编译器决定存储它的任何地方。通常,它既不在堆栈中也不在堆中,而是在可执行映像的数据段的只读区域中。
答案 1 :(得分:2)
字符串存储在只读存储器中。指针本身存储在main
。
答案 2 :(得分:2)
除非您的编译器文档明确表明void main()
是合法签名,否则请改用int main(void)
:
int main(void)
{
char *p = "hello";
return 0;
}
确切地分配p
和字符串"hello"
的内存将随实现而变化。对于ELF和PE / COFF格式,p
的内存将位于main
的堆栈帧内,而"hello"
的内存将位于只读数据段中({ {1}}表示PE / COFF,.rdata
表示ELF)。
答案 3 :(得分:0)
您的字符串存储在内存中,指针指的是存储字符串的内存地址。如果你调用这个指针,它会返回内存地址,你可以使用它。