4

共有三种结构;数组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]。换句话说, if(c-*a)-2是 string 的偏移量b,将从偏移量的位置开始puts(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 回答