不知道你有没有见过-1作为数组下标的,我算是见到了。当然这一点在Python之类的语言中毫不稀奇。
下标-1的代码
这里redis源码中的一部分:
sds sdsMakeRoomFor(sds s, size_t addlen) {
void *sh, *newsh;
size_t avail = sdsavail(s);
size_t len, newlen;
char type, oldtype = s[-1] & SDS_TYPE_MASK;
int hdrlen;
//摘取部分代码
其中sds定义如下:
typedef char* sds
我们忽略其中的逻辑,其实可以看到在sds中有很多使用-1作为下标的。那么这里到底有什么含义?又有什么好处呢?别急!
数组下标访问
我们都知道,数组下标可以以O(1)复杂度访问一个数组的元素:
int arr[] = {1,2,3,4,5};
printf("%d\n",arr[2]);
上面的示例代码中,就是访问了数组的第三个元素,实际上,作用等价于;
printf("%d\n",*(arr+2));
这一点,我已经在《