使用指针偏移以修改数组下标

数据结构这本书有这么个思考题:

如果应用中要求数组下标中某个值,例如 -3 开始,但 C 语言中数组下标只能从 0 开始,如何建立它们之间的映射关系?

挺有意思的问题,考虑下标实际就是指针操作,所以有了以下代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include <stdio.h>

int main(int argc, char *argv[])
{
    int arr[5] = {1, 2, 3, 4, 5};
    int *array = &arr[3];
    printf("%d\n", array[-3]);
    printf("%d\n", array[-2]);
    printf("%d\n", array[-1]);

    return 0;
}

运行结果如下:

1
2
3
1
2
3

也就是说, array[-3] 其实等价于 arr[0],也就是说有以下关系:

1
*(array-3) == *(arr + 0);

这样处理的偏移量在某些时候还是很好用的!

萌ICP备20241614号