c - 使用包括数组、整数和指针在内的指针算法在 C 中打印字符串

标签 c arrays char pointer-arithmetic

共有三种结构;数组 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) 将从 (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/

相关文章:

Jquery - 使用数组内容填充下拉框

c - 排序时保持两个数组的顺序相同

比较C中的多个字符

c++ - 检查 char 多维数组中的值,cpp

c - 我如何在 linux 中搜索常量定义(在 c 包含文件中)

C 表达式必须是可修改的值

c - `long` 保证与 `size_t` 一样宽

C 编程开关案例

c# - 如何将 matlab 中的矩阵转换为 C#/.NET 中的 double[,] 数组?

在 C 中创建外部字符数组