MOH*_*MED 8 c c++ comparison pointers
我知道<
只有当指针指向相同的内存空间(如数组)时才允许在C标准中使用指针比较.
如果我们采取一个数组:
int array[10];
int *ptr = &array[0];
Run Code Online (Sandbox Code Playgroud)
在比较 ptr
,以array+10
允许吗?array+10
指针是否在数组内存之外被考虑,因此不允许进行比较?
例
for(ptr=&array[0]; ptr<(array+10); ptr++) {...}
Run Code Online (Sandbox Code Playgroud)
是的,允许指针指向刚好超过数组末尾的位置.但是,不允许您遵循这样的指针.
C99 6.5.6/8附加运营商(重点增加)
如果表达式P指向数组对象的最后一个元素,则表达式(P)+1指向一个超过数组对象的最后一个元素,如果表达式Q指向一个超过数组对象的最后一个元素,则表达式(Q)-1指向数组对象的最后一个元素.如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则评估不应产生溢出; 否则,行为未定义.如果结果指向数组对象的最后一个元素之后,则不应将其用作已计算的一元*运算符的操作数.
并且,特别是对指针的比较操作:
C99 6.5.8/5关系运算符
如果表达式P指向数组对象的元素,并且表达式Q指向同一数组对象的最后一个元素,则指针表达式Q + 1比较大于P.在所有其他情况下,行为是未定义的.