在以下函数中:
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++中做什么?
++
*str1++
*str2++
eulz3vhy1#
*str++中的++运算符递增指针(而不是指向的对象)。
*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在增量发生之前所指向的字符。这是标准中优先级规则的结果-后缀操作符(如++)比一元(前缀)操作符(如*)具有更高的优先级,除非使用括号来改变这一点。
str
*
1qczuiv02#
当你读或写*str1++时,应用后缀递增的常规规则,即:1.指针递增到下一个地址1.返回上一个指针值在这个阶段,您将取消引用指针值(即递增之前的值),并使用它所指向的值。
5n0oy7gb3#
*str1++表示首先使用str1所指的值,然后递增str1。
str1
char arr[] = "meow"; char ch; char *str = arr; ch = *str++; // ch = *(str++) both does same
执行上述语句后:
ch
'm'
arr[1]
6pp0gazn4#
在C(以及一些派生语言)中,char类型也是number类型(一个可以包含256个不同值的小类型),因此您可以对它进行算术运算,如加法(+2)、增量(++)等。在本例中,++操作符不递增char,而是递增指向该char的指针。*str2++返回指向str2的指针的下一个地址
C
char
number
+2
str2
4条答案
按热度按时间eulz3vhy1#
*str++
中的++
运算符递增指针(而不是指向的对象)。图中显示了两个非常不同的操作(其中一个使用了两种不同但等价的符号),尽管它们都返回
str
在增量发生之前所指向的字符。这是标准中优先级规则的结果-后缀操作符(如++
)比一元(前缀)操作符(如*
)具有更高的优先级,除非使用括号来改变这一点。1qczuiv02#
当你读或写
*str1++
时,应用后缀递增的常规规则,即:1.指针递增到下一个地址
1.返回上一个指针值
在这个阶段,您将取消引用指针值(即递增之前的值),并使用它所指向的值。
5n0oy7gb3#
*str1++
表示首先使用str1
所指的值,然后递增str1
。执行上述语句后:
ch
将包含'm'
;str
将指向地址arr[1]
。6pp0gazn4#
在
C
(以及一些派生语言)中,char
类型也是number
类型(一个可以包含256个不同值的小类型),因此您可以对它进行算术运算,如加法(+2
)、增量(++
)等。在本例中,
++
操作符不递增char,而是递增指向该char的指针。*str2++
返回指向str2
的指针的下一个地址