Oli*_*rth 17
不保证; 这是未定义的行为:
在实践中,你很可能最终指向data,但任何访问它的尝试都将导致UB.
数组下标是根据指针算法定义的,C99标准对指针算法有这样的说法:
如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则评估不应产生溢出; 否则,行为未定义.
因此,严格来说,访问Node->links[-1](即使只是获取地址Node->links[-1])是未定义的行为.所以你无法保证Node->links[-1]会得到你Node::data.
但正如许多评论家所提到的那样,它几乎总能奏效.我仍然认为应该避免的编程习惯很差.如果不是为了技术性,那么因为它需要修改struct Node很容易导致编译器无法帮助你的错误.当有人将东西之间data和links,事情会打破神秘.