我刚刚读了一些代码,发现这个人用arr[-2]
来访问arr
之前的第二个元素,就像这样:
|a|b|c|d|e|f|g|
^------------ arr[0]
^---------- arr[1]
^---------------- arr[-2]
允许吗?
我知道arr[x]
和*(arr + x)
是一样的.arr[-2]
等于*(arr - 2)
,这似乎没问题.你怎么认为?
我刚刚读了一些代码,发现这个人用arr[-2]
来访问arr
之前的第二个元素,就像这样:
|a|b|c|d|e|f|g|
^------------ arr[0]
^---------- arr[1]
^---------------- arr[-2]
允许吗?
我知道arr[x]
和*(arr + x)
是一样的.arr[-2]
等于*(arr - 2)
,这似乎没问题.你怎么认为?
没错.根据C99第6.5.2.1/2节:
下标的定义
没有魔法.这是1-1等价.和往常一样,在取消引用指针(*)时,您需要确保它指向有效的地址.