编译时决定内存地址

来源:互联网 发布:vb flag是什么意思 编辑:程序博客网 时间:2024/05/17 06:53

谭老师说,“如果在程序中定义了一个变量,就在编译时给这个变量分配内存单元。”

又说,“其实程序经过编译以后已经将变量名转为变量的地址。……变量与地址的对应关系是在编译时确定的。”

由于每次执行程序时,计算机内存使用情况总是不相同的,因此,某一个程序中变量所对应的内存地址,不可能是真正的内存地址,而应该是程序每次运行时,分配给程序一些内存,程序再对这些内存进行排列分配,设定相对于本程序的“地址”。

因此,程序中所谓的地址,其实是相对程序本身来说的,而不是真实的物理内存的地址。

这是我在读到指针这一章时联想到的东西。不知道真实的情况是不是如此。

顺便说一下使用scanf函数输入数据时的情形。

请看下面这段小程序:

  1. main(){
  2.     int a,b;
  3.     int *p1,*p2,*p;
  4.     p1 = &a;
  5.     p2 = &b;
  6.     printf("input a and b:");
  7.     scanf("%d,%d",p1,p2);
  8.     if(a > b)
  9.     {
  10.         p = p1;
  11.         p1 = p2;
  12.         p2 = p;
  13.     }
  14.     printf("a=%d,b=%d/n",a,b);
  15.     printf("max=%d,min=%d",*p2,*p1);
  16. }
这是我对书中原来一段例子程序进行改造后的结果,运行的效果与原程序相同。那么我们应该可以这样认为:在输入数据时,scanf函数是直接通过指针变量把数据放在“指针所指的内存单元”上。虽然从代码上看,仅仅是通过指针变量对地址的表现形式进行置换,但这样一样,引用的含义就变得清晰了。

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 发票名字写错了怎么办 红米2卡开机画面怎么办 三星s4字库坏了怎么办 百度云上传很慢怎么办 入户网线头断了怎么办 针织的衣服起球怎么办 网线被车挂断了怎么办 挂了光纤跑了怎么办 cf天赋点多了怎么办 cf天赋点点错了怎么办 警用记录仪丢了怎么办 被伪基站覆盖了怎么办 加热包的水喝了怎么办 剩米饭放硬了怎么办 肉罐头拉环断了怎么办 5大战区拥兵自重怎么办 买的期房停工了怎么办 怀孕后长了副乳怎么办 耳朵冻的红肿了怎么办 吃螃蟹吃柿子了怎么办 吃了螃蟹和柿子怎么办 螃蟹与柿子同吃怎么办 手被鞭炮炸伤了怎么办 索尼l36h变砖了怎么办 oppor9s手机忘记解锁图案怎么办 索尼z5刷死机了怎么办 魅蓝note3被锁定怎么办 oppo图案锁忘了怎么办 手机图案锁忘w怎么办输 手机图案解锁密码忘了怎么办 忘记htc手机锁屏怎么办 我手机密码忘了怎么办 小米5x忘记密码怎么办 oppo忘记手机解锁图案怎么办 手机解锁图案忘了怎么办 苹果id给锁了怎么办 苹果手机忘了ld怎么办 4s忘记开机密码怎么办 取卵22个肚子胀怎么办 夜神模拟器很卡怎么办 夜神模拟器卡顿怎么办