“++”操作符对“char *"做什么?

z2acfund  于 2023-01-25  发布在  其他
关注(0)|答案(4)|浏览(262)

在以下函数中:

double dict(const char *str1, const char *str2) {

具体如下:

if (strlen(str1) != 0 && strlen(str2) != 0)
    while (prefix_length < 3 && equal(*str1++, *str2++)) prefix_length++;

运算符++*str1++*str2++中做什么?

eulz3vhy

eulz3vhy1#

*str++中的++运算符递增指针(而不是指向的对象)。

(*str)++;   /* Increment the character pointed at by str */
 *str++;    /* Increment the pointer in str */
*(str++);   /* Increment the pointer in str - the same, but verbose */

图中显示了两个非常不同的操作(其中一个使用了两种不同但等价的符号),尽管它们都返回str在增量发生之前所指向的字符。这是标准中优先级规则的结果-后缀操作符(如++)比一元(前缀)操作符(如*)具有更高的优先级,除非使用括号来改变这一点。

1qczuiv0

1qczuiv02#

当你读或写*str1++时,应用后缀递增的常规规则,即:
1.指针递增到下一个地址
1.返回上一个指针值
在这个阶段,您将取消引用指针值(即递增之前的值),并使用它所指向的值。

5n0oy7gb

5n0oy7gb3#

*str1++表示首先使用str1所指的值,然后递增str1

char arr[] = "meow";
char ch;

char *str = arr;

ch = *str++;    // ch = *(str++) both does same

执行上述语句后:

  1. ch将包含'm';
  2. str将指向地址arr[1]
6pp0gazn

6pp0gazn4#

C(以及一些派生语言)中,char类型也是number类型(一个可以包含256个不同值的小类型),因此您可以对它进行算术运算,如加法(+2)、增量(++)等。
在本例中,++操作符不递增char,而是递增指向该char的指针。
*str2++返回指向str2的指针的下一个地址

相关问题