#include<iostream> #include<stdlib.h> #define CHANGE 0 //供修改 using namespace std; int main(int argc,char *argv[]) { #if CHANGE int b=10; int a[10]={1,3,4,5}; cout<<"单值b在前时"<<endl; #else int a[10]={1,3,4,5}; int b=10; cout<<"单值b在后时"<<endl; #endif int *pa=a; int *pb=&b; cout<<"指向a数组"<<endl; for(int i=0;i<10;i++) { cout<<"pa+"<<i<<"->"<<pa+i<<endl; } cout<<"\n指向b单值"<<endl; for(int i=0;i<10;i++) { cout<<"pb+"<<i<<"->"<<pb+i<<endl; } system("PAUSE"); return 0; }
编译器分配的内存是连续的,先分配了a,接着就分配b,而栈的指针是按递减方式移动,所以pb的值加1指针就向前移动1位,所以指向了a上的元素了
如果改变定义的顺序,先分配单值b , 而后分配a ,则情况就不同了、