有三种结构;数组a
和b
以及指针c
:
c --------------------------.
|
V
___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
a --> | a | | | | | b | i | g | | | r | i | d | e | |
´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´
___ ___ ___ ___ ___ ___ ___
b --> | F | l | y | i | n | g | |
´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´
这是代码:
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
。有人能善良地把它打破吗?
- CCD_ 5与CCD_。换句话说,如果
(c-*a)-2
是到串b
的偏移,则puts(b+(c-*a)-2)
将从(c-*a)-2
偏移处的位置开始打印串b
c
被分配给*(a+1)
,或*(&(a[1])),或简单地分配给指向"big"
的a[1]
- 计算图表上的平方,得出
c-*a
的值(它是5) b[5-2]
就是"ing"
免责声明:如果有人试图在我的公司签入此类代码,他将不再为我们工作。