C语言指针迭代问题:如何理解last - 1含义及代码判断逻辑
C语言指针运算问题解答
- 关于
last - 1的含义
C语言的指针运算是类型感知的:对指向item类型的指针做减1操作时,编译器会自动计算1 * sizeof(item)的偏移量,将指针往低地址方向移动一个item类型的长度。
结合你给出的前提(last指向序列最后一个有效元素),只要序列元素个数≥2,last - 1确实指向序列的倒数第二个元素。如果序列只有1个元素(first == last),执行last - 1属于非法越界访问,行为未定义。 - 双元素序列下的if判断结果
当序列仅包含first和last两个元素时,first是第一个元素的地址,last是第二个元素的地址,last - 1偏移后刚好指向第一个元素,所以first == last - 1的判断结果为真,会执行return 0的逻辑。
额外说明:你给出的代码片段中指针声明存在语法问题,正确的同类型多指针声明写法为item *first, *last;,原代码重复写了item关键字,实际编译会报错。
内容的提问来源于stack exchange,提问作者Kinder9211
相关产品推荐
相关产品推荐

