c ++之间的差异--k [i]和k [i] -

时间:2016-06-24 09:09:07

标签: c++ pointers

假设我们有类似的功能。

void f(int *k){
  k++; //increments the pointer to the second element
  (--(*k)); //what exactly does is mean? 

}
int main(){
  v[]={1,2,3};
  f(v); //passes the pointer to the forst elemento of v
}

它遵循什么顺序? 如果我在--k[1]这样的函数中有void f(int k[3])怎么办?

2 个答案:

答案 0 :(得分:1)

  

c ++之间的区别--k [i]和k [i] -

前者预先减少。后者会进行后递减。

(--(*k)); //what exactly does is mean?

operator*是取消引用运算符。

  

它遵循什么顺序?

所有表达式都遵循operator precedence规则。带括号的组具有比任何操作符更紧密的绑定。

答案 1 :(得分:0)

最好的办法是打开调试器并逐步检查:)

调用函数f(v)时,将指向数组的指针传递给它的第一个元素。

f(v)内,您首先将指针增加1(k++)。这里需要注意的是,你传递的对象类型无关紧要,它总是移动到另一个对象,因此对象的大小无关紧要。

现在(--(*k)) - 你减少了*k里面的内容(现在指向数组的第二个元素 - 所以2)。

总之,完成功能后v == {1,1,3};