所以我最近在看某人的代码,我发现编译器没有报错,也没有以下任何运行时错误:
const char *p = "I didn't malloc...";
上面的代码有效,但我想知道如何。这就是我认为正在发生的事情。谁能证实这一点?
所以“我没有 malloc...”在编译时在堆栈上静态分配,地址被传递给指针 p。类似于静态数组的分配方式。我对此有 90% 的把握,但一些确认会有所帮助。
谢谢。
最佳答案
你有一个字符串文字 "I didn't malloc..."
位于只读内存中的某处(确切地说是实现定义的位置),它由指针 p 指向
。
需要注意的重要一点是,任何更改此字符串文字的尝试都将导致未定义的行为。
事实上,在 C++ 中,不推荐像您那样声明字符串文字。
所以在 C++ 中,您应该使用 const
限定符,例如:
const char *p = "I didn't malloc...";
关于c++ - 这行代码是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8458379/