#include <stdio.h>
int main()
{
char a[] = "hello";
char *ptr = a;
printf ("%c\n",*ptr++);//it prints character 'h'.
printf ("%c\n",*ptr);//it prints character 'e'.
return 0;
}
据我了解:在上面的代码中,在*ptr++
表达式中,*
和++
都具有相同的优先级,操作将从右到左进行,这意味着指针将先增加,然后顺从。所以它应该在第一个'e'
语句中打印字符printf
。但事实并非如此。
所以我的问题是:如果它没有在第一个*ptr++
语句中取消引用该位置,它将在何处存储递增的值(in printf
)?
答案 0 :(得分:8)
ptr++
表示“增加ptr
,但会返回预增量值。”
因此,尽管首先发生了增量,但它是原始,非增量指针被解除引用。
相反,如果您的优先推理正确,*++ptr
应按预期打印e
。 ++ptr
表示“递增ptr
并返回后递增值”。
答案 1 :(得分:0)
无论发生什么都是正确的。
当执行* ptr ++时,它只需要* ptr值并执行操作,因为它是一个后增量,如果你使用了++ * ptr,它将首先打印e。
答案 2 :(得分:0)
p ++是后增量而++ p是预增量。 p ++给出p的值然后递增p的内容,而++ p递增p的内容然后返回p的值
答案 3 :(得分:0)
它将存储在指针ptr本身中。这就像让ptr指向它曾经指向的下一个字节:
ptr = ptr + 1;
答案 4 :(得分:-2)
yupp,指针将在每次使用后自动递增。