2017-06-13 79 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*(解除引用/间接)然后调用。

所以效果是你取消引用指针的当前值,但指针随后增加。