c++ - 如何使用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;
}
解决方案
对于初学者,编译器将放置具有自动存储持续时间的变量的顺序是未指定的。因此,不必将数组 b 放在数组 a 之后,反之亦然。
其次,编译器可以对齐数组,例如在等于 16 字节的段落边界上。
因此,相对于您的程序,编译器似乎将数组 b 放置在数组 a 之后,没有间隙。
但是放置在数组 A 之后的数组 B 在 16 字节的边界或其他值上对齐。所以这两个数组定义之间存在差距。
例如,您可以通过将数组 A 和 B 中的元素数量减少到 4 个来进行实验
int A[]={1,2,3,4};
int B[]={1,2,3,4};
推荐阅读
- c# - 如何执行涉及小数的平方根计算
- svg - 如何将 SVG 转换为 BMP?
- vue.js - 如何在vuejs中检查复选框时添加时间戳
- python - django makemigrations 错误“没有这样的列”
- php - 无法显示逗号分隔字符串中的图像
- flutter - Azure DevOps 项目直接发布到 google play 控制台
- r - 如何加载实际的 .RData 文件,即称为 .RData (从会话中保存的压缩文件)
- python - “进程以退出代码 0 完成”在代码执行后需要很长时间才会出现
- neo4j - 如何通过过滤节点的属性来探索 neo4j 中的路径?
- simulation - Anylogic:如何让代理在队列中等待直到它改变状态?(离散事件流程图)