c++ - 当使用指向数组的指针时,我们迭代什么?

标签 c++ c arrays pointers

<分区>

这是一个简单的函数,用于查找特定字母的出现次数。

1:  int count_x(char *p, char a)
2:  {
3:      int count = 0;
4:      while(*p != '\0')
5:      {
6:        if (*p == a)
7:            count++;
8:        p++;
9:      }
10:      return count;
11:  }

我们可以使用 p[n] 访问特定元素,或者我们可以取消引用 *p 并获取该数组的第一个元素作为示例,以及我们通常做的所有事情。
对我来说奇怪的是第 8 行。 当我们编写 p++ 时,我们得到的是我们从一开始就传递 -1 符号的数组。因此,如果它是 hello, world 那么它将是 ello, world。 我们以某种方式遍历索引,但我真的不明白如何。

我能解释一下所有这些东西是如何工作的吗?

最佳答案

循环条件*p != '\0' 表示:*​​迭代直到p指向的值是'\0' .循环体内的语句

p++;

递增指向所传递字符串的下一个字符的指针。

对于第一次迭代

+--------+--------+--------+--------+--------+--------+--------+--- ----+--------+--------+--------+--------+
|        |        |        |        |        |        |        |        |        |        |        |        |
|  'h'   |  'e'   |  'l'   |  'l'   |  'o'   |  ','   |  'w'   |  'o'   |  'r'   |  'l'   |  'd'   |  '\0'  |
|        |        |        |        |        |        |        |        |        |        |        |        |
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
  ^
  |       
  p   

第二次迭代:

+--------+--------+--------+--------+--------+--------+--------+--- ----+--------+--------+--------+--------+
|        |        |        |        |        |        |        |        |        |        |        |        |
|  'h'   |  'e'   |  'l'   |  'l'   |  'o'   |  ','   |  'w'   |  'o'   |  'r'   |  'l'   |  'd'   |  '\0'  |
|        |        |        |        |        |        |        |        |        |        |        |        |
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
             ^
             | 
             p

等等。当 p 到达点 '\0' 时,条件 *p != '\0' 变为 false 并且循环终止。 在每次迭代中,指针 p 都会更改它指向的位置。字符串保留在其初始存储位置。

关于c++ - 当使用指向数组的指针时,我们迭代什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39292428/

相关文章:

c++ - 在 C++ 兼容性更改后,G++ 生成的二进制文件比 GCC 小,但比之前的二进制文件稍大?

c - 链表中的节点是单独的结构还是同一结构的一部分?

c - 如何将16位十六进制数转换为二进制数,然后统计其中0和1的个数?使用最简单的C程序

javascript - 遍历数组并将每个值除以 100

java - 数组的好处

python - 如何删除或屏蔽 numpy 数组相对于另一个条目的条目

C++ 模板化类作为子类或引用?

c++ - C++ 中是否有标准的循环整数类?

C++(无 C++11)通过 std::map 回调到类 getter 函数

c++ - ZigBee Arduino,解析数据不正确