当在C中使用诸如anArray ++之类的表达式时,数组和指针之间的差异

时间:2017-06-22 04:33:06

标签: c arrays pointers

我目前正在使用C&#Primer Plus第6版的书来学习C.

在关于数组和指针的章节中,作者陈述了

  

就C而言,两个表达式ar [i]和*(ar + i)是等价的   在意义上。如果ar是数组的名称,则两者都有效,并且两者都有效   ar是一个指针变量。但是,使用诸如ar ++之类的表达式   仅当ar是指针变量时才有效。

我认为在c中,ar[0]*(ar + 0)是等价的,它们都等于数组索引0中包含的值。但是,如果ar++只是一个指针变量,那么ar这样的表达式才有效?我真的坚持它背后的逻辑。

4 个答案:

答案 0 :(得分:3)

假设arr是一个数组,arr++就可以使用它。那么,应该做什么?如果它递增,那么,指针到数组的第一个元素的位置在哪里?因此,指向数组的第一个元素的数组的值可能会增加并且不再合乎逻辑,这是没有意义的。

另一方面,如果arr是指针,则可以将其移动并设置为其他位置。因此,您可以更改指针的值。

总而言之,虽然这个事实是正确的,数组的名称指向已分配数组的第一个元素,但是像指针一样随时间设置或更改是没有意义的。

答案 1 :(得分:3)

ar++

评估为

ar=ar+1这对数组ar[]不起作用,因为一旦声明的数组将不允许您永久地更改其起始索引,这确实是{{1}之间的主要区别}和*arr

对于数组arr[]ar[]ar[1]的工作原理是因为指针类型算术或指针表示法可用于数组,反之亦然,两者都应该产生相同的代码。

答案 2 :(得分:1)

ar ++增加指向数组的指针的位置。通常,ar ++将指针移动到数组中的下一个元素。 在声明数组之后,指针最初指向第一个元素或ar [0]。 ar ++使指针移动到下一个元素或ar [1],依此类推。

答案 3 :(得分:1)

ar++等同于ar = ar + 1.所以基本上它是一个赋值,所以通过增量我们正在改变一个不允许的数组的基址。