C 指向数组最后一个元素的指针

C pointer to last element of array

假设我们有一个数组

int a[4];

有一个巧妙的技巧,使用指针算法来查找最后一个元素。据我所知,它使用的是 'a' 的地址并递增它,以便它会在数组之后立即指向,然后返回一个位置。 递增背后的想法是,有一个隐含的 sizeof 正在完成。没有任何明确的 sizeof

有人知道这是怎么做到的吗?

非常感谢!

我可以建议以下解决方案

#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;
}

程序输出为

*p = 3

您可能正在考虑涉及 &a + 1 的内容,它是指向刚好超过结构末尾的内存的指针。

然而,(&a)[1][-1],或相同的表达式,但用指针表示法代替数组表示法,*(&a + 1))[-1]*(*(&a + 1) - 1),是 。但是有人可能把它写成 "clever trick" 而没有意识到它是未定义的。

((int *)(&a + 1))[-1] 定义明确并且可以完成工作,尽管可以说比编写简单的代码更难阅读。