现在的位置: 首页 > 综合 > 正文

C/C++变量之间的“干扰”

2013年10月09日 ⁄ 综合 ⁄ 共 515字 ⁄ 字号 评论关闭
#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 ,则情况就不同了、

抱歉!评论已关闭.