ポインターについて質問です。私は概念を理解し始めていますが、このコードの特定の部分はその理解を脅かしているので、それを明確にしたいだけです.
行「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;
}