c++11 - 为什么指向数组不同元素的两个指针之间的区别是这两个指针之间的元素数?
问题描述
int main()
{
int arr[]={2,3,5,6,8};
int *ptr;
ptr=&arr[3];
cout<<ptr-arr;
}
问:为什么编译代码后答案是 3,即它应该是 3*sizeof(int),在这种情况下应该是 3*4=12?
解决方案
原因是编写正确的代码要容易得多。
当数组的连续元素之间的指针差为1时,则可以使用++p
遍历数组(假设p
是指向某个元素的指针)。例如:
int a[10];
for (auto p = a, e = a + 10; p != e; ++p)
*p = 42;
请注意代码如何不必处理元素的大小。如果数组类型从int
变为double
,则代码不必更改并且仍然正确。
推荐阅读
- php - ElasticSearch Count API , php 中多次计为一个请求
- javascript - JS - 找到小于或等于给定界限的最大整数,该界限可被某个数字整除
- gradle - 仅根据 Gradle 中的条件执行 task.dependsOn
- java - BasicDBList 到 Arraylist
- c# - 在内存中为子进程创建共享变量到父 C#
- python - 使用 pipenv 时的依赖问题
- matlab - 绘制与变换后的网格网格 (X,Y) 坐标相对应的相关值
- c# - 在 RowFilter 之后使用过滤器结果更新数据表
- python - PySpark 中的 Spark 聚合,如果可能,无需再进行改组操作
- c - 如何在 linux 上创建一个 10 兆字节的二进制文件?