首页 > 解决方案 > 如何使用c ++中的指针找到第一个数组的下一个数组的地址

问题描述

我以两种不同的方式找到了第一个数组的下一个数组的地址。在二维数组中,两种方法都给出下一个 aaray 的相同地址但是在一维数组中,两种方法都给出不同的地址这是什么原因?我怎样才能得到正确的答案?

int main()
{  
    cout<<"In 2D Array------>"<<endl<<endl;  
    int a[4][3]={{1,2,3},
                     {4,5,6},
                     {7,8,9},
                     {10,11,12}};                    
    int b[4][3]={{1,2,3},
                     {4,5,6},
                     {7,8,9},
                     {10,11,12}}; 
                        
    cout<<"Address of first Array = "<<&a<<endl<<endl;  
    cout<<"Address of Next Array = "<<&a+1<<endl;
    cout<<"Address of Next Array = "<<&b<<endl<<endl;
   
    cout<<endl<<endl<<endl<<endl<<endl;
    
    cout<<"In 1D Array----->"<<endl<<endl;  
    int A[]={1,2,3,4,5};
    int B[]={1,2,3,4,5};
        
    cout<<"Address of first Array = "<<&A<<endl<<endl;
    cout<<"Address of Next array = "<<&A+1<<endl;
    cout<<"Address of Next array = "<<&B<<endl<<endl;
      
    return 0;
}

标签: c++arrayspointersmemory-addressmemory-alignment

解决方案


对于初学者,编译器将放置具有自动存储持续时间的变量的顺序是未指定的。因此,不必将数组 b 放在数组 a 之后,反之亦然。

其次,编译器可以对齐数组,例如在等于 16 字节的段落边界上。

因此,相对于您的程序,编译器似乎将数组 b 放置在数组 a 之后,没有间隙。

但是放置在数组 A 之后的数组 B 在 16 字节的边界或其他值上对齐。所以这两个数组定义之间存在差距。

例如,您可以通过将数组 A 和 B 中的元素数量减少到 4 个来进行实验

int A[]={1,2,3,4};
int B[]={1,2,3,4};

推荐阅读