3
#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

4

5 回答 5

8

ptr++表示“增量ptr,但返回预增量值”。

因此,尽管增量首先发生,但取消引用的是原始的非增量指针。

相反,如果您的优先推理是正确的,则应该按预期*++ptr打印。意思是“增加并返回增加后的值”。e++ptrptr

于 2012-12-20T11:58:33.210 回答
0

无论发生什么都是正确的。

在执行 *ptr ++ 时,它只需要 *ptr 值并执行操作,因为它是一个后增量,如果你使用 ++ *ptr 它会首先打印 e 。

于 2012-12-20T11:59:46.537 回答
0

p++ 是后增量,而 ++p 是前增量。p++ 给出 p 的值,然后递增 p 的内容,而 ++p 递增 p 的内容,然后返回 p 的值

于 2012-12-20T12:01:03.180 回答
0

它将存储在指针 ptr 本身中。这就像让 ptr 指向它曾经指向的下一个字节:

ptr = ptr + 1;
于 2012-12-20T12:03:41.627 回答
-2

是的,每次使用后指针都会自动递增。

于 2012-12-20T12:00:11.507 回答