Correction:
I messed up with the concept of pointer address and the address the pointer points to, so the following code has been modified. And now it prints out what I want, variable a, c, i, j, k, p are on the stack, and variable b,d are on the heap. Static and global variables are on another segment. Thanks a lot for all of you!
Well, I know that these two concepts are deeply discussed...but I still have questions for the following code:
#include <iostream> 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; }
My result is:
&a: 0x28ff20 &b: 0x7c2990 &i: 0x28ff1c &N: 0x443000 &c: 0x28fef3 &d: 0x7c0f00 &j: 0x28feec &k: 0x28fee8 &l: 0x443004 &m: 0x443008 &p: 0x28ff00
This is pretty interesting, coz except the global variable N, and two static variables in function f, which are l and m, the addresses of all the other variables seem to be together. (Note: The code and the results have been modified and not corresponding to what is said here.)
I ve searched a lot about stack and heap. The common sense is that, if an object is created by "new", then it is on the heap. And local variables (such as j and k in the above sample) are on stack. But it seems not to be the case in my example. Does it depend on different compilers, or my understanding is wrong?
Thanks a lot for all of you.