在c语言中,变量名 地址 存储单元的内容 分别怎样储存?

来源:百度知道 编辑:UC知道 时间:2024/06/19 15:32:45
例如:
int a;
a=5;
其中的a,5以及5的地址分别怎么存储?
我更想知道a是否储存了,怎样储存的?5不是被随机分配一地址,假如它被分配了两个字节为2001-2002,那么2001就会成为他的地址,那2001又怎样储存的?

定义int a;时,编译器分配4个字节内存,并命名该4个字节的空间名字为a(即变量名),当用到变量名a时,就是在使用那4个字节的内存空间.
5是一个常数,在程序编译时存放在代码的常量区存放着它的值(就是5),当执行a=5时,程序将5这个常量拷贝到a所在的4个字节空间中,就完成了赋值操作.
=======================================
a是我们对那个整形变量的4个字节取的"名字",
是我们人为给的,实际上计算机并不存储a这个名字,只是我们编程时给那4个字节内存取个名字好用.实际上程序在编译时,所有的a都转换为了那个地址空间了.编译成机器代码后,没有a这个说法了.a这个名字只存在于我们编写的代码中.
5不是被随机分配的,而总是位于程序的数据段中,可能在不同的机器上在数据段中的位置可能不一致,它的地址其实不能以我们常用到的内存地址来理解,因为牵扯到一个叫"计算机寻址方式"的问题,所以写很多都解释不清楚,你自己找本汇编语言的书来学一下吧.........

  首先,在C语言中,存储器实际上是一个大的字节数组,字节数组中的每一个元素称为存储单元,基本的存储单元为字节。

  其次,在C语言中,每一个存储单元占一个字节,每一个字节对应一个地址,这个地址即为内存地址。

  再次,在C语言中,变量名是一个标识符,在C语言中标识符只能有数字、字母、下划线(_)组成,且第一个符号必须是字母或者下划线(_)。

  最后,对于C语言中的变量来说,它具备两个基本的属性,一个是地址,一个是内容。正是因为此,所以在函数参数传递时有两种方法一种是传址,一种是传值 。比如下面的代码:

  int a = 2; //a是变量名,它有两个属性,一个是地址,一个是值。
  int *p = &a; //使用取地址运算符&即可获取变量的地址
  int b = a; //使用变量名可以取得变量的值
  int&nb