这行代码如何工作?

Edw*_*win 4 c c++ memory pointers

所以我最近在查看某人的代码,我看到编译器没有抱怨,也没有任何运行时错误,如下所示:

const char *p = "I didn't malloc...";
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但我想知道如何.这就是我认为正在发生的事情.有谁能确认一下吗?

所以"我没有malloc ..."在编译时静态分配在堆栈上,并将其地址传递给指针p.类似于静态数组的分配方式.我90%肯定这一点,但一些确认会有所帮助.

谢谢.

Alo*_*ave 8

你有一个字符串文字"I didn't malloc..."位于只读内存中的某个位置(确切地说是实现定义的位置),它由指针指向p.

需要注意的重要一点是,任何更改此字符串文字的尝试都将导致未定义的行为.

实际上在C++中,不推荐使用它来声明字符串文字.
所以在C++中你应该有一个const限定符,如:

const char *p = "I didn't malloc...";
Run Code Online (Sandbox Code Playgroud)


cni*_*tar 7

这是一个字符串文字.标准不知道"堆栈","堆"等 - 这些是实现细节.所以没有"标准"的位置.

通常它不在堆栈上.它位于一个只读区域text.它并不" 类似于静态数组的分配方式 ".


Mar*_*ett 5

内存也以只读方式分配,任何改变*p的尝试都是未定义的.
通常不在堆栈上,它将是可执行文件的数据段的一部分