指向字符串的指针存储在哪里

时间:2011-08-24 08:09:14

标签: c

void main()
{
    char *p = "hello";
}

P的存储类型和内存中的点(堆栈/数据段)是什么? 字符串“helllo”存储在哪里?

4 个答案:

答案 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)

您的字符串存储在内存中,指针指的是存储字符串的内存地址。如果你调用这个指针,它会返回内存地址,你可以使用它。