共有三种结构;数组 a
和 b
以及指针 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
。有好心人拆解一下吗?
最佳答案
b+(c-*a)-2
等同于&b[(c-*a)-2]
。换句话说,如果(c-*a)-2
是字符串b
的偏移量,puts(b+(c-*a)-2)
将从(c-*a)-2
偏移量的位置开始打印字符串b
。c
被赋值为*(a+1)
,或 *(&(a[1])),或简单地a[1]
,指向"big"
- 数一数你图表上的方 block ,求出
c-*a
的值(它是 5) b[5-2]
是"ing"
免责声明:如果有人试图在我公司 checkin 此类代码,他将不再为我们工作。
关于c - 使用包括数组、整数和指针在内的指针算法在 C 中打印字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8796425/