对于int(*p)[10]; 为什么*2[p+i]的访问等价于0[(i+1)[p+1]]的访问?
2024-11-22 阅读 12
在C语言中,指针和数组的访问是等价的。给定一个指针p,p+i指向p所指向的数组的第i个元素。因此,p+i和i[p]是等价的。
根据这个规则,*2[p+i]可以解释为*(2[p+i]),即先计算2[p+i],然后取其值。根据指针和数组访问的等价性,2[p+i]等价于p[i+2],所以*2[p+i]等价于*(p[i+2])。
同样地,0[(i+1)[p+1]]可以解释为0[((i+1)[p+1])],根据指针和数组访问的等价性,(i+1)[p+1]等价于(p+1)[i+1],即先计算(i+1)[p+1],然后再取其值。因此,0[(i+1)[p+1]]等价于0[(p+1)[i+1]],即*(p+1)[i+1]。
因此,*2[p+i]和0[(i+1)[p+1]]的访问是等价的。
更新于 2024年11月25日