地址
地址
何为地址?
在内存(注意我们这里提到内存并不是我们常说的计算机的物理内存,而是虚拟的逻辑内存空间)当中,简单点说:地址就是可以唯一标识某一个点的一个编号,即一个数字。我们都见过尺子,我们统一一毫米为单位,一把长1000毫米的尺子,其范围为0~999,而我们可以准确的找到35毫米,256毫米处的位置。
同样道理,内存也如此,也是想尺子一样线性排布,只不过这个范围略大,在我们最广泛使用的32位操作系统下,是从 0~4,294,967,295之间 ,而地址就是这之中的一个编号而已。
习惯上,在计算机里地址我们常用其对应的十六进制数来表示。比如 0x12ff7c这样 。
在我们的程序中,每一个定义的变量,在内存中都咱有一个内存单元,比如int类型占四个字节,char类型占一个字节等等。每个字节都在 0~4,294,967,295 之间有一个对应的编号,
在程序中使用变量的地址,并可以通过地址运算符&得到变量的地址。
在 C语言的例子:
#include
int main()
{
int i;
int a[10]={1,2,3,4,5,6,7,8,9,0};
char b[10]={'c','l','a','n','g','u','a','g','e'};
for(i=0;i<10;i++)
{
printf("int Address:0x%x,Value:%d\n",&a[i],a[i]);
}
printf("\n");
for(i=0;i<10;i++)
{
printf("char Address:0x%x,Value :%c\n",&b[i],b[i]);
}
return 0;
}
在32位linux系统下运行参考结果:
int Address:0xbfb949c4,Value:1
int Address:0xbfb949c8,Value:2
int Address:0xbfb949cc,Value:3
int Address:0xbfb949d0,Value:4
int Address:0xbfb949d4,Value:5
int Address:0xbfb949d8,Value:6
int Address:0xbfb949dc,Value:7
int Address:0xbfb949e0,Value:8
int Address:0xbfb949e4,Value:9
int Address:0xbfb949e8,Value:0
char Address:0xbfb949f2,Value :c
char Address:0xbfb949f3,Value :l
char Address:0xbfb949f4,Value :a
char Address:0xbfb949f5,Value :n
char Address:0xbfb949f6,Value :g
char Address:0xbfb949f7,Value :u
char Address:0xbfb949f8,Value :a
char Address:0xbfb949f9,Value :g
char Address:0xbfb949fa,Value :e
char Address:0xbfb949fb,Value :
可以发现 数组中的每一个值都占用了一个内存地址。