gnd*_*tro 1 c++ stack static memory-management
对于以下代码,我想知道是否只在堆栈中创建了一个数组,或者是否还有一个在静态中创建的数组.我只是对字符串中的数组创建感到困惑.
char str[] = "White";
Run Code Online (Sandbox Code Playgroud)
我假设这会在堆栈中创建一个名为str的指针,该指针指向具有以下内容的数组"White\0",在静态内存中.这是正确的假设吗?
不.
"White"是某个char[6]静态内存中的数组.(或魔法之地,未指明,并且完全无关紧要).请注意,它可能"White"与代码中其他地方的静态数组相同,也可能不同.
char str[] = "White";char[6]在堆栈上创建一个新的本地数组,命名str并将字符从静态数组复制到本地数组.没有涉及任何指针.
请注意,这只是可以复制数组的唯一情况.在大多数情况下,数组不会像这样复制.
如果你想要一个魔术静态数组的指针,只需使用 const char* str = "White";
Phonetagger指出,如果代码行不在函数中,那么str不在堆栈中,而且在魔术静态内存中,但是复制仍然(理论上至少)恰好在该转换单元中的代码执行开始之前发生.