3

私はこの古いプログラムのこの構文を理解しておらずC、コードが何をするのかをテストするように設定されていません。私が混乱しているのは、配列への連結です。Cがそのような自動型キャストを処理できるとは思いませんでした。それとも、金曜日の午後ということで頭の中で難しすぎたのでしょうか...

char wrkbuf[1024];
int r;
//Some other code
//Below, Vrec is a 4 byte struct
memcpy( &Vrec, wrkbuf + r, 4 );

ここで何が起こるか考えていますか?連結またはintを追加するとどうwrkbufなりますか?

4

2 に答える 2

4

wrkbuf + rと同じです&wrkbuf[r]

基本的に、最初の要素へのポインターに「崩壊」するwrkbufという表現で使用される場合。wrkbuf + 4次に、それに追加rすると、ポインターがr要素ごとに進みます。つまり、ここでは連結は行われておらず、ポインター演算を行っています。

memcpy( &Vrec, wrkbuf + r, 4 );、wrkbuf 配列から 4 バイトを、r番目の要素から のメモリ空間にコピーします。Vrec

于 2011-02-04T20:31:52.737 に答える
2

memcpy(&Vrec, wrkbuf + r, 4)rの-番目の位置から4バイトをにコピーwrkbufVrecます。配列にintを追加すると、その配列のr-番目の位置(この場合は)のメモリアドレスを取得します&wrkbuf[r]

サンプルmemcpyCの実装(ご覧のとおり、これは非常によく似ていますstrcpy):

void *
memcpy (void *destaddr, void const *srcaddr, size_t len)
{
  char *dest = destaddr;
  char const *src = srcaddr;

  while (len-- > 0)
    *dest++ = *src++;
  return destaddr;
}

見る:

于 2011-02-04T20:28:26.680 に答える