地址在多个指针中不连续



我正在尝试刷新我对指针的知识。我似乎不明白为什么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;
}

您正在使用 64系统 8字节。如果您使用8个字节的地址位置,则结果在中继续位置

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

您说的应该是19d7020,19d7015,19d7010等。如果您这样做,那么指针尺寸将5个字节。我认为这些架构都没有用于指针的5个字节。

19d7015 − 19d7010 = 5

最新更新