3

我从网上得到了一个源代码,但有一行对我来说是模棱两可的。我有一个功能:

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++ 中做了什么?

4

4 回答 4

6

++运算符*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在增量发生之前指向的字符。这是标准中优先级规则的结果——后缀运算符一元(前缀)运算++符具有更高的优先级,除非使用括号来改变这一点。*

于 2013-07-18T04:02:39.040 回答
2

当您读取或写入 时*str1++,将应用后缀增量的常规规则。那是:

  1. 指针递增到下一个地址
  2. 返回之前的指针值

在那个阶段,您取消引用指针值(这是递增之前的值)并使用它指向的值。

于 2013-07-18T04:03:38.827 回答
1

*str1++表示首先使用value pointed by str1然后递增str1

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

char *str = arr;

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

现在,在执行上述语句后,

  1. ch 将包含'm'
  2. str将指向的地址arr[1]
于 2013-07-18T04:01:44.933 回答
0

C(和一些派生语言)中,char类型也是一种number类型(可以包含 256 个不同值的小类型),因此您可以对其进行算术运算,例如加法 ( +2)、增量 ( ++) 等。

在这种情况下,++运算符不会增加 char 而是增加指向此 char 的指针。

*str2++返回指针的下一个地址str2

于 2013-07-18T04:08:49.177 回答