代码之家  ›  专栏  ›  技术社区  ›  Raul Grigorașcu

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

  •  2
  • Raul Grigorașcu  · 技术社区  · 8 年前

    假设我们有一个数组

    int a[4];

    使用指针算法找到最后一个元素有一个巧妙的技巧。据我所知,它使用了“a”的地址,并将其递增,使其立即指向数组的后面,然后返回一个位置。 sizeof 正在完成。没有任何明确的 sizeof公司 .

    非常感谢!

    2 回复  |  直到 8 年前
        1
  •  9
  •   Vlad from Moscow    8 年前

    我可以建议以下解决方案

    #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
    
        2
  •  5
  •   M.M    8 年前

    你可能在想 &a + 1 ,它是指向刚过结构末尾的内存的指针。

    (&a)[1][-1] ,或相同的表达式,但用指针表示法代替数组表示法, *(&a + 1))[-1] *(*(&a + 1) - 1) technically undefined behaviour 但是有人可能会把这写成一个“聪明的伎俩”,而没有意识到它是没有定义的。

    ((int *)(&a + 1))[-1]