地址在多个指针中不连续

时间:2014-03-09 11:07:40

标签: c++ pointers

我正在尝试刷新我对指针的了解。我似乎不明白为什么cout向我显示对象的值而不是在显示((*alpha+i)+j)的行上的地址。使用&((*alpha+i)+j)时会显示相同的输出。 我问的原因是因为我认为内存分配是连续的,但是基于地址的输出,它,

Address 0: 0x19d7010  
Address 1: 0x19d7018 
Address 2: 0x19d7020
Address 3: 0x19d7028
Address 4: 0x19d7030

我认为这将是10,15,20,25& 30

#include <iostream>

using namespace std;

int main( int argc, char **argv) {

char ** alpha;
alpha = new char * [5];
cout<<"Address alpha: "<<alpha<<'\n';


cout<<"Size of alpha: "<<sizeof(alpha)<<'\n';
for (int i=0; i<5; i++)
{
*(alpha+i)=new char [5];
cout<<"Address "<<i<<": "<<(alpha+i)<<'\n';

if(i<2)
for(int j=0; j<5; j++)
*(*(alpha+i)+j)='t';
else
for(int j=0; j<5; j++)
*(*(alpha+i)+j)='o';

for(int j=0; j<5; j++)
cout<<"Value "<<i<<": "<<(*(alpha+i)+j)<<'\n';

}

for(int i=0; i<5; i++){
cout<<"Value of i: "<<i<<'\n';
delete[] *(alpha+i);
}
delete[] alpha;
}

1 个答案:

答案 0 :(得分:1)

您正在使用 64系统在指针大小 8字节。如果您的地址位置占用8个字节,则结果位于继续位置

19d7018 − 19d7010 = 8
19d7020 − 19d7018 = 8
19d7028 − 19d7020 = 8

你说怎么说应该是19d7020,19d7015,19d7010等..? 如果你那样,那么指针大小将是5个字节。我认为没有一个架构需要5个字节的指针。

19d7015 − 19d7010 = 5