【发布时间】: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。