• C语言中,a[-1] (负数下标)的用途


    例子1

    我们都知道数组下表是从0开始的,假如我们想从1开始,可以这么干:

    定义一个指针,指向a[-1]这个位置

    #include <stdio.h>
    void main()
    {
        int a[] = {1,3,4};
        int *p = &a[-1];
        int i =0;
        for( i = 1; i <4; i++)
        {
            printf("%d
    ", p[i]);
        }
    }

    因为数组并不检查下表是否越界,下表仅表示偏移, -1就表示第一个元素前面那个元素

    例子2

    在 头文件 stdarg.h 中,有如下宏定义:

    typedef char* list;

    va_arg

    #define va_arg(list,mode)   ( (mode *) ( list += sizeof(mode) ) )[-1]

    返回可变参数列表的当前指定类型参数,并将指针指向下一参数(mode参数描述了当前参数的类型)

    注:list += sizeof(mode) 表示指针 list 指向下一个参数,((mode *) list) 表示把指针 list 强制转换为 mode * 类型,list[-1] 表示取指针 list 当前指向的前一个成员

  • 相关阅读:
    3.25训练题
    hdu1495
    poj1426 宽搜
    高斯消元
    codeforces 999E 强联通分量
    hdu4289城市与歹徒 网络流
    蒟蒻的离散化模板
    樱花,素数筛
    【转】分圆问题:一个诡异的数列规律
    hdu1257最少拦截系统 贪心
  • 原文地址:https://www.cnblogs.com/god-of-death/p/14886562.html
Copyright © 2020-2023  润新知