char数组的创建导致内存静态?

gnd*_*tro 1 c++ stack static memory-management

对于以下代码,我想知道是否只在堆栈中创建了一个数组,或者是否还有一个在静态中创建的数组.我只是对字符串中的数组创建感到困惑.

char str[] = "White";
Run Code Online (Sandbox Code Playgroud)

我假设这会在堆栈中创建一个名为str的指针,该指针指向具有以下内容的数组"White\0",在静态内存中.这是正确的假设吗?

Moo*_*uck 8

不.

"White"是某个char[6]静态内存中的数组.(或魔法之地,未指明,并且完全无关紧要).请注意,它可能"White"与代码中其他地方的静态数组相同,也可能不同.

char str[] = "White";char[6]在堆栈上创建一个新的本地数组,命名str并将字符从静态数组复制到本地数组.没有涉及任何指针.

请注意,这只是可以复制数组的唯一情况.在大多数情况下,数组不会像这样复制.

如果你想要一个魔术静态数组的指针,只需使用 const char* str = "White";

Phonetagger指出,如果代码行不在函数中,那么str不在堆栈中,而且在魔术静态内存中,但是复制仍然(理论上至少)恰好在该转换单元中的代码执行开始之前发生.

  • 实际上,这不是数组副本,而是`char`数组的初始化语法. (2认同)
  • @MatteoItalia:关键是你要从存储字符串文字的"数组"的任何地方进行复制,作为初始化的一部分.文字_does_有数组类型,因此Mooing的答案是准确的. (2认同)