繁体   English   中英

使用指针算法在C中打印字符串,包括数组,整数和指针

[英]Printing a string in C with pointer arithmetic including arrays, integers and pointers

有三种结构; 数组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 有人可以善良并打破它吗?

  • b+(c-*a)-2&b[(c-*a)-2] 换句话说,如果(c-*a)-2是字符串b的偏移量,则puts(b+(c-*a)-2)将从puts(b+(c-*a)-2)的位置开始打印字符串b (c-*a)-2偏移。
  • c被指定为*(a+1)或*(&(a [1])),或简称a[1] ,指向"big"
  • 计算图表上的方块以找到c-*a的值(它是5)
  • b[5-2]"ing"

免责声明:如果有人试图在我公司办理此类代码,他将不再为我们工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM