指针内存分配

时间:2015-02-20 10:24:03

标签: c++ c arrays pointers memory

我正在尝试深入学习指针的概念。在下面的代码中,我创建了一个数组,创建了一个指向每个元素的指针。

int bucky[5];
int *bp0 = &bucky[0];
int *bp1 = &bucky[1];
int *bp2 = &bucky[2];

cout<<"bp0 is at memory address:"<<bp0<<endl;
cout<<"bp1 is at memory address:"<<bp1<<endl;
cout<<"bp2 is at memory address:"<<bp2<<endl;

这些是给予数组元素的内存分配。

  

bp0位于内存地址:0x0018ff3c
  bp1位于内存地址:0x0018ff40
  bp2位于内存地址:0x0018ff44

由于我对c ++的了解有限,我知道内存是连续分配给一个数组的。但仔细观察输出,bp0看起来不合适。

根据我的说法,bp0应该在0x0018ff36。或者位置0x0018ff3c , 0x0018ff40 , 0x0018ff44在CPU中是连续的吗?

那么是否有可能在一个进程中分配两个连续的内存分配?

2 个答案:

答案 0 :(得分:7)

           +---+---+---+---+---+---+---+---+---+---+---+---+
           |      bp0      |      bp1      |      bp2      |
           +---+---+---+---+---+---+---+---+---+---+---+---+
  0x0018ff3c   d   e   f  40   1   2   3   4   5   6   7   8

假设int的大小为4个字节,bp0的大小为0x0018ff3c。

bp1 = bp0 + 4 = 0x0018ff40
bp2 = bp1 + 4 = 0x0018ff44

答案 1 :(得分:4)

每个int使用4个字节。 数组的第一个位置是0x0018ff3c,所以下一个int将是0x0018ff3c + 4

注意地址是heaxadecimal,所以:

0x0018ff3c + 0x00000004 = 0x0018ff40

注意:这些都是十六进制数字。订单如下所示:0x3c0x3d0x3e0x3f0x400x41 ......