このコードが何をするかについては、たくさんの答えがあります。おそらく、ptrが指す配列の内容をコピーし、それを逆の順序で構造体「xdata」内に含まれる別の配列に格納します。
あなたはこれを自分で解読する方法を尋ねました。これは素晴らしい質問です。学ぶための最良の方法は自分でそれを行うことです。これが私のアドバイスです。あなたが知っていることを取り入れ、それに基づいて独自の小さなプログラムを作成し、出力を表示します。
たとえば、すべてのコードを確認しなくても、4つの要素の配列「yarray」があり、逆参照されたポインタからの値を格納していることがわかります。以下のような小さなプログラムを作成して、コードがどのように反応するかを確認できます。
void main()
{
int yarray[4] = {0, 0, 0, 0};
int my_array[4] = {1, 2, 3, 4};
int *ptr = my_array;
int cntr;
for(cntr = 0; cntr < 4; cntr++)
printf("then: my_array = %d, and yarray = %d\n", my_array[cntr], yarray[cntr]);
//Add the code that you're not sure what it does here...
yarray[3] = *(ptr++);
yarray[2] = *(ptr++);
yarray[1] = *(ptr++);
yarray[0] = *(ptr++);
//Check out the results!
for(cntr = 0; cntr < 4; cntr++)
printf("now: my_array = %d, and yarray = %d\n", my_array[cntr], yarray[cntr]);
}
これで、コードがptrが指しているコンテンツの順序を逆にして、yarrayに格納していることがわかります。
then: my_array= 1, and yarray = 0
then: my_array= 2, and yarray = 0
then: my_array= 3, and yarray = 0
then: my_array= 4, and yarray = 0
now: my_array= 1, and yarray = 4
now: my_array= 2, and yarray = 3
now: my_array= 3, and yarray = 2
now: my_array= 4, and yarray = 1