指针操作

时间:2012-12-20 11:56:54

标签: c pointers

#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)?

5 个答案:

答案 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,指针将在每次使用后自动递增。