1

こんにちは、誰かがこのコード行が何をするのか教えてください

xdata.yarray[3] = *(ptr++);  
xdata.yarray[2] = *(ptr++);  
xdata.yarray[1] = *(ptr++);  
xdata.yarray[0] = *(ptr++);  

私は誰かElseのコードを理解しようとしているので、誰かが誰かElseのコードを解読するための最良の方法についていくつかの有用なポインタを提供できれば、問題が発生することもありがたいです。

ありがとうございました

xdataの代わりに単なるデータである場合、コードの意味は変更されますか

4

4 に答える 4

3

arrの初期値に設定するとptr、コードは値、、、arr[0]arr[1]要素、...、にarr[2]入力します。つまり、4つの要素の範囲を逆の順序でコピーします。副作用として、最終的にになるようにの値を変更します。arr[3]xdata.yarray[3]xdata.yarray[0]ptrarr + 4

これ*ptrはと同じptr[0]であり、式は同じように評価されます*(ptr++)が、ptr増分されたままになることに注意してください。

于 2012-08-22T15:42:43.680 に答える
2

基本的には、配列ポインタをbyptryarrayメンバーxdataに逆の順序でコピーします。

于 2012-08-22T15:42:32.133 に答える
1

データを割り当て、ポインタをインクリメントして、次の割り当てで。が指す次の値を使用できるようにしますptr

これは単に次と同等です。

xdata.yarray[3] = *ptr;  
ptr++;
xdata.yarray[2] = *ptr;  
ptr++;
xdata.yarray[1] = *ptr;  
ptr++;
xdata.yarray[0] = *ptr;  
ptr++;
于 2012-08-22T15:42:21.993 に答える
1

このコードが何をするかについては、たくさんの答えがあります。おそらく、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
于 2012-08-22T16:03:59.577 に答える