#include <iostream> using namespace std; #include <stdio.h> int main() { int a=100; int b=10; cout<<"/********************************/"<<endl; printf("%d\n",&a); printf("%d\n",&b); if(&a>&b){ cout<<"down"<<endl; }else{ cout<<"up"<<endl; } int c[10]; cout<<"/********************************/"<<endl; for(int i=0;i<10;i++){ c[i]=i; } cout<<"/********************************/"<<endl; for(int j=0;j<10;j++){ printf("%d\n",&c[j]); } cout<<"/********************************/"<<endl; float *p=NULL; double *q=NULL; printf("%d\n",p); printf("%d\n",q); printf("%d\n",&p); printf("%d\n",&q); cout<<"/********************************/"<<endl; return 0; }
結論:&a>&b.先定義的變量a,後定義的變量b。變量a變量b都在臨時區。因此棧向下生長的。對於數組地址隨著下標越來越大,這是由於棧的生長方向和內存空間buf存放方向是兩個不同的概念。
#include <iostream> using namespace std; #include <stdio.h> #include <stdlib.h> int main() { char *p=NULL; char *q=NULL; p=(char *)malloc(16*sizeof(char)); q=(char *)malloc(16*sizeof(char)); printf("\n%d\n",sizeof(char)); printf("%d\n",&p); printf("%d\n",&q); printf("\np[0]:%d", &p[0]); printf("\np[1]:%d", &p[1]); printf("\nq[0]:%d", &q[0]); printf("\nq[1]:%d", &q[1]); if(p!=NULL){ free(p); } if(q!=NULL){ free(q); } return 0; }
結論:先定義的p指針和malloc區,在定義q指針和malloc區。在堆區p[0]比q[0]的大。而且p[1]比p[0]大。可知,堆是向上生長的。