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++でその場所を逆参照していない場合、インクリメントされた値をどこに保存しますか?printf

4

5 に答える 5

8

ptr++ptr「インクリメントしますが、インクリメント前の値を返します」を意味します。

したがって、インクリメントが最初に発生するという事実にもかかわらず、逆参照されるのはの、インクリメントされていないポインターです。

対照的に、優先順位の推論が正しければ、期待どおりに出力される*++ptrはずです。「インクリメントして、インクリメント後の値を返す」ことを意味します。e++ptrptr

于 2012-12-20T11:58:33.210 に答える
0

p ++はポストインクリメントであり、++pはプレインクリメントです。p ++はpの値を与えてからpの内容をインクリメントし、++pはpの内容をインクリメントしてからpの値を返します

于 2012-12-20T12:01:03.180 に答える
0

何が起こっても正しい。

*ptr ++ を実行すると、*ptr 値を取得して操作を実行するだけです。これはポスト インクリメントであり、++ *ptr を使用すると、最初に e が出力されます。

于 2012-12-20T11:59:46.537 に答える
0

ポインター ptr 自体に格納されます。これは、ptr がポイントしていた次のバイトを指すようにするようなものです。

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

ええ、ポインターは使用するたびに自動的にインクリメントされます。

于 2012-12-20T12:00:11.507 に答える