0

ポインターについて質問です。私は概念を理解し始めていますが、このコードの特定の部分はその理解を脅かしているので、それを明確にしたいだけです.

行「B」に注意してください。 printf("ptr + %d = %d\n",i, *ptr++); /*<--- B*/

*ptrが に初期化された&my_array[0]ので、*ptr++(「 に格納されているアドレスにあるものは何でもptr、それに 1 を追加する」と解釈されます) は、 の値である 23 を出力するという印象を受けましたmy_array[1]

それでも、 である の値を出力しmy_array[0]ます1

アドレス自体に追加するかどうか (1004 が 1005 になるなど) について混乱して++おり、整数は約 4 バイトのスペースを占めるmy_array[0]ため、(値 1 がアドレスは 1001、1002、1003、1004 であり、my_array[0]1001 から始まり 1002 までしか上がらないため、*ptr++それでも ) が出力されますmy_array[0]。これは1)...

また...

かどうか*ptr++my_array[0](これは*ptr) からmy_array[1] *ptr++になります。これは私が最初に考えたものです。

基本的に、*ptr++特にこのプログラムに何をするのか説明してください。私が5歳のときのように説明してください。

本当に感謝しています。コードは次のとおりです。

#include <stdio.h>

int my_array[] = { 1, 23, 17, 4, -5, 100 };
int *ptr;

int main(void)  
{ 
    int i;
    ptr = &my_array[0];     /* point our pointer to the first
                                  element of the array */
    printf("\n\n");
    for (i = 0; i < 6; i++)
    {
        printf("my_array[%d] = %d   ", i, my_array[i]);   /*<-- A */
        printf("ptr + %d = %d\n", i, *ptr++);   /*<--- B*/
    }
    return 0;
}
4

2 に答える 2

3

これを変える: printf("ptr + %d = %d\n",i, *ptr++); /*<--- B*/

これに: printf("ptr + %d = %d\n",i, *(++ptr)); /*<--- B*/

インクリメント演算子の後置版ifを使用すると、インクリメント前のオブジェクトの値が式によって値で返されます。プレフィックスインクリメント演算子 (この回答の 2 番目のコードセットで使用) は、インクリメントされたオブジェクトを参照によって返します。

于 2013-04-21T23:51:20.247 に答える
0

*ptr++ は、printf の後にインクリメントされます。*(++p) を使用する必要があります。

于 2013-04-21T23:48:55.113 に答える