我可以建议以下解决方案
#include <stdio.h>
int main( void )
{
int a[4] = { 0, 1, 2, 3, };
int *p = (int *)(&a + 1) - 1;
printf("*p = %d\n", *p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
程序输出是
*p = 3
Run Code Online (Sandbox Code Playgroud)
你可能正在考虑一些涉及的事情 &a + 1,它是指向结构末尾之后的内存的指针。
但是,(&a)[1][-1],或相同的表达式,但用指针表示法代替数组表示法,*(&a + 1))[-1]或*(*(&a + 1) - 1),在技术上是未定义的行为。但是有人可能会将此写成“聪明的把戏”,却没有意识到它是未定义的。
((int *)(&a + 1))[-1] 定义明确并且可以完成工作,尽管可以说比编写简单的代码更难阅读。