2017-06-13 80 views
0

指針的情況下*p表示存儲的值,p表示地址(用於聲明int *p)。
根據以下聲明,name指向字符串「示例」。所以​​將是「E」,不是地址,而是實際值。那麼下面的程序如何工作?我的意思是,我們正在增加價值本身,而不是指針(困惑)。使用C中的字符指針打印字符串

char *name="Example"; 
while(*name !='\0'){ 
    printf("%c\n",*name++); 
} 

打印

E 
    x 
    a 
    m 
    p 
    l 
    e 
+4

運算符優先級 – Justin

+0

請參見http://en.cppreference.com/w/cpp/language/operator_precedence –

+0

「name指向字符串」示例「」 - 編號'name'指向第一個字符'char'陣列。 C沒有字符串類型。您的其他假設也不正確(或格式不正確 - 使用降價!) – Olaf

回答

0

你誤解了*name++表達:儘管++如下​​,它適用於name獨自一人,不​​,因爲運營商++比指針引用運營商*更高的優先級。

這個優先規則在C程序中非常常用。例如,K &的r單行strcpy實現使用此表達式兩次:

void strcpy(char* dest, const char *src) { 
    while (*dest++ = *src++) 
     ; 
} 
0

的遞增name++具有比解引用一個更高的優先級。​​。

所以它基本上是:*(name++)。而不是:(*name)++

0

你可以從表中看到http://en.cppreference.com/w/c/language/operator_precedence,後綴++具有海格優先級比提領*。那麼會發生什麼第一個name++評估哪些增加指針,但返回的原始地址operator*(解除引用/間接)然後調用。

所以效果是你取消引用指針的當前值,但指針隨後增加。