4

3 つの構造があります。配列abポインターc:

c --------------------------.
                            |
                            V
       ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
a --> | a | \0| \0| \0| \0| b | i | g | \0| \0| r | i | d | e | \0|
       ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´
       ___ ___ ___ ___ ___ ___ ___
b --> | F | l | y | i | n | g | \0|
       ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´

これはコードです:

int main(){
   char a[3][5]={"a", "big", "ride"};
   char b[]="Flying";
   char *c=*(a+1);

   puts(b+(c-*a)-2);

   return 0;
}

今、私が理解できないのは式b+(c-*a)-2です。誰かが親切にしてそれを打ち破ることができますか?

4

1 に答える 1

8
  • b+(c-*a)-2と同じ&b[(c-*a)-2]です。つまり、 が string へのオフセットである場合、(c-*a)-2オフセットの位置から始まる文字列を出力します。bputs(b+(c-*a)-2)b(c-*a)-2
  • cが割り当てられている*(a+1)、または *(&(a[1])) 、または単にa[1]を指す"big"
  • ダイアグラムの正方形を数えて値を見つけますc-*a(5 です)
  • b[5-2]"ing"

免責事項: 誰かが私の会社でそのようなコードをチェックインしようとした場合、その人はもはや私たちのために働いていません.

于 2012-01-09T23:14:34.073 に答える