这是一个简单的函数,用于查找特定字母的出现次数。
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
都会更改它指向的位置。字符串保留在其初始存储位置。