gpt4 book ai didi

c++ - 地址在多个指针中不连续

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:39 26 4
gpt4 key购买 nike

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

关于c++ - 地址在多个指针中不连续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22281404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com