++运算符对char *做了什么

时间:2013-07-18 04:00:24

标签: c char operators

我从网上获得了一个源代码,但有一行对我来说很模糊。我有一个功能:

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 个答案:

答案 0 :(得分: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在增量发生之前指向的字符。这是标准中优先级规则的结果 - postfix operators类似++的优先级高于unary (prefix) operators,如*,除非使用括号来改变它。

答案 1 :(得分:2)

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

  1. 指针递增到下一个地址
  2. 返回前一个指针值
  3. 在那个阶段你取消引用指针值(这是递增之前的值)并使用它指向的值。

答案 2 :(得分: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]
  3. 的地址

答案 3 :(得分:0)

C中的

(以及一些派生语言)char类型也是number类型(可以包含256个不同值的小类型),因此您可以执行算术运算它,如加法(+2),增量(++)等等。

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

*str2++返回指向str2

的指针的下一个地址