取下标之后相同,不等于原来的东西就是相同了。
就好比一个 int funca(int a) 跟 int funcb(int b) 两个函数都返回 int,你能说这两个是相同的函数吗?
p[3] 的意思是 *(p+3)
a[3] 的意思是*(a+3)
两者确实是完全一致的。但这个取值只是某个下标指向的目标。 a 跟 p 本身并不等价。
简单的说:数组含有比指针更多的信息(比如数组长度),但数组在特定情况下会退化为指针。
似乎有部分同学对数组与指针依然存在争议。这里补充说明一下:
从数组那里可以获取数组的长度信息,但这仅仅是一个信息,你完全可以不使用它,或者无视它,所以数组确实允许下标越界。但是在编译器看来数组跟指针确实不同。
对指针来说,并不会含有长度信息,就算你想要用也没有,因此指针常常使用其它方式传递其中内容的长度。
如果忽略数组的长度信息,确实可以把数组当作指针使用,但这并不意味着两者没有区别,它的长度信息至少在编译阶段是客观存在的。