2013-01-06 122 views
1

我很纳闷,为什么:C:采用指针与++ /更新的内存地址的内容 -

*some_var++; 

不一样的效果:

*some_var = *some_var + 1; 

...是因为在第二个例子中,解除引用操作符被用于两个不同的目的?

*some_var = *some_var + 1; 

这就是说:中* some_var一审被设置& some_var的内容,而中* some_var呼吁& some_var的当前内容的第二个实例? ...这是一个区别C不能与声明:* some_var ++;

而且,确实:

*some_var++; 

做任何事情,如果是这样,是什么?

感谢您的任何意见......也许是一件小事,但我很好奇。

+0

谢谢,我-问题预搜索没有发现这一点。 – d0rmLife

回答

7
*some_var++; 

相当于

*(some_var++); 

和不等同于:

(*some_var)++; 

++后缀运算符具有比*一元运算符更高的优先级。

顺便说一句,你不要在您语句中使用*运营商的价值,*some_var++;语句也相当于some_var++;(假设some_var不是一个指向volatile对象)。

+0

+1当您不在意记忆操作符的优先顺序时,请使用括号。跟随你的非专家会对此表示赞赏。在某些情况下,海湾合作委员会甚至会建议。 –

+1

@JonathonReinhart我一般同意这一点,但'* ptr ++'是任何体面的C程序员都应该能够理解的表单。 – ouah

+0

@ ouah:当然!谢谢。 – d0rmLife

0

看下面的例子:

ex: 1 

int main() 
{ 
    char *ptr = "stackoverflow"; 
    *ptr++; 
    printf ("%s\n", ptr);//this will print "tackoverflow" i.e pointr is incremented. 
    return 0; 
} 

ex:2 

int main() 
{ 
    char *ptr = "stackoverflow"; 
    *ptr = *ptr + 1;// here you are trying to assing incremented content to *ptr, but this will give you error because string literal "stackoverflow" is stored in the read only memory so you can't modify . 
}