C++中堆栈的地址
C++中堆栈的地址
更正:
我在指针地址和指针所指向的地址的概念上搞混了,所以下面的代码已经修改了。现在它打印出了我想要的结果,变量 a、c、i、j、k、p 在堆栈上,变量 b、d 在堆上。静态和全局变量在另一个段中。非常感谢大家!
嗯,我知道这两个概念已经被深入讨论了...但我还是对下面的代码有问题:
#include using namespace std; class A { }; int N = 10; void f(int p) { int j = 1; float k = 2.0; A c; A* d = new A(); static int l = 23; static int m = 24; cout << "&c: " << &c << endl; cout << "&d: " << d << endl; cout << "&j: " << &j << endl; cout << "&k: " << &k << endl; cout << "&l: " << &l << endl; cout << "&m: " << &m << endl; cout << "&p: " << &p << endl; } int main() { int i = 0; A* a; A* b = new A(); cout << "&a: " << &a << endl; cout << "&b: " << b << endl; cout << "&i: " << &i << endl; cout << "&N: " << &N << endl; f(10); return 0; }
我的结果是:
&a: 0x28ff20 &b: 0x7c2990 &i: 0x28ff1c &N: 0x443000 &c: 0x28fef3 &d: 0x7c0f00 &j: 0x28feec &k: 0x28fee8 &l: 0x443004 &m: 0x443008 &p: 0x28ff00
这相当有趣,因为除了全局变量 N,以及函数 f 中的两个静态变量 l 和 m,所有其他变量的地址似乎都在一起。 (注意:代码和结果已经被修改,不对应这里所说的内容。)
我搜索了很多有关堆栈和堆的资料。常识是,如果通过“new”创建对象,则它在堆上。而本地变量(如上面示例中的 j 和 k)则在堆栈上。但在我的例子中似乎不是这种情况。这取决于不同的编译器,或者我的理解是错误的吗?
非常感谢大家。
admin 更改状态以发布 2023年5月23日