减去整数数组的索引的结果[重复]
Posted
技术标签:
【中文标题】减去整数数组的索引的结果[重复]【英文标题】:Result of subtracting indexes of an integer array [duplicate] 【发布时间】:2021-04-23 05:39:54 【问题描述】:我目前正在学习 C++,我对这段代码感到困惑:
int array[10];
int* p1 = &array[3];
int* p2 = &array[7];
cout<<"p2-p1=" << p2 - p1 <<endl;
我认为结果会是 16,因为整数数组的一个元素是 4 字节大小,但编译器说 p2-p1=4。数组指针之间的减法是否忽略了字节的大小?
【问题讨论】:
正确:指针算法使用底层类型的大小。使用指针算法来计算数组中 元素 的数量比计算字节数要有用得多。如果需要字节,您可以随时将指针转换为const char*
。
所有指针运算都是在“元素”而不是“字节”中完成的。
int* p1 = &array[3]
与int* p1 = array + 3
相同。也许这样会更清楚。
类型控制指针运算。所以int *p;
其中p + 1
是内存中的下一个int
。
【参考方案1】:
它不会忽略字节的大小,但指针知道指向对象的大小。所以 4 字节如果它是一个整数,8 字节对于双精度,...。这甚至适用于您自己的结构的数组。我刚刚添加了一张图片,以可视化它的外观。
【讨论】:
(好图...) 我不知道这是不是讽刺,但我只是用excel“画”了它:D 不,其实我是很认真的,一张图真的值1000字。 啊是的我知道,当我学习 C/C++ 和所有指针的东西时,我总是画出我刚刚写的东西来理解我的代码:D以上是关于减去整数数组的索引的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章