#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]大。可知,堆是向上生長的。