假设我们有类似的功能。
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])
怎么办?
答案 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};