illlh 发表于 2008-12-17 19:50:04

哪位同学有兴趣来看看这个我不清楚该怎么分类的问题

猜想:
    在C语言中,声明一个变量会直接在内存中划分出一个区域用来存储变量的值,我好奇这个划分是怎么进行的,同时也有了一个疑问,当两个程序中出现同名变量,而且两个程序同时运行时,这两个变量会不会相互冲突,或者互不相干?
验证方式:
    在TC环境下写两个程序α、β,在两程序中有同名变量a,对a进行赋值,并进行输出,输出过程受控,以验证是否在输出过程中a被更改。

验证程序α:
main()
{
   int a;
   printf("请输入一个整数为aα赋值\n");
   scanf("%d",&a);
   getch();//在这里暂停,执行程序β
   printf("aα=%d,aα的地址是%d\n",a,&a);
    getch();
}

验证程序β:
main()
{
   int a;
   printf("请输入一个整数为aβ赋值\n");
   scanf("%d",&a);
   printf("aβ=%d,aβ的地址是%d\n",a,&a);
    getch();
}

验证过程:
1.运行程序α,按提示输入一个整数7
2.运行程序β,按提示输入另一个整数8
    3.切换回程序α的窗口,按任意键进行aα的输出
验证结果:
    按照以上验证方法,连续3次执行验证过程,aα的输出值为7,aβ的输出值为8,两个变量的值没有出现影响。但是也发现一个不理解的结果,3次验证过程中,每次验证结果中aα与aβ的地址总是相等,分别为-68、-64、-60。

我知道内存分配不会简单到随便分配个同名变量就会出现冲突的地步,但是不知道这个分配过程是谁在执行的,是怎么执行的,以上验证过程证实了我原来猜想中aα输出值为8的错误,却符合两变量地址相同的预期结果。
谁能给我解释一下这是为什么呢?或者我该去查阅哪方面的资料?

illlh 发表于 2008-12-19 22:45:54

是太简单了没人愿意回答吗?
页: [1]
查看完整版本: 哪位同学有兴趣来看看这个我不清楚该怎么分类的问题