我目前正在使用C&#Primer Plus第6版的书来学习C.
在关于数组和指针的章节中,作者陈述了
就C而言,两个表达式ar [i]和*(ar + i)是等价的 在意义上。如果ar是数组的名称,则两者都有效,并且两者都有效 ar是一个指针变量。但是,使用诸如ar ++之类的表达式 仅当ar是指针变量时才有效。
我认为在c中,ar[0]
和*(ar + 0)
是等价的,它们都等于数组索引0中包含的值。但是,如果ar++
只是一个指针变量,那么ar
这样的表达式才有效?我真的坚持它背后的逻辑。
答案 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.
所以基本上它是一个赋值,所以通过增量我们正在改变一个不允许的数组的基址。