2013-01-06 66 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 . 
}