我正在尝试刷新我对指针的了解。我似乎不明白为什么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;
}
答案 0 :(得分:1)
您正在使用 64系统在指针大小 8字节。如果您的地址位置占用8个字节,则结果位于继续位置
19d7018 − 19d7010 = 8
19d7020 − 19d7018 = 8
19d7028 − 19d7020 = 8
你说怎么说应该是19d7020,19d7015,19d7010等..? 如果你那样,那么指针大小将是5个字节。我认为没有一个架构需要5个字节的指针。
19d7015 − 19d7010 = 5