我做了一次递归练习,我无法理解做*p++
或*p+=1.
它们都应该在指向的值上加1,但由于某种原因,*p+=1
有效,而*p++
则没有。
void rec(char a[], int *p ,int i)
{
if(a[i+1]== '\0')
return;
if(a[i]==a[i+1])
*p+=1;
rec(a, p, i+1);
}
void rec(char a[], int *p ,int i)
{
if(a[i+1]== '\0')
return;
if(a[i]==a[i+1])
*p++;
rec(a, p, i+1);
}
答案 0 :(得分:1)
*p += 1;
表示取消引用指针p
,然后将解除引用的值增加1
。虽然*p++;
表示
*p;
p += 1; // Increment the pointer itself
这是因为++
的优先级高于*
运算符,因此编译器会将其解析为*(p++);
。
(*p)++
相当于*p += 1;
。
答案 1 :(得分:1)
优先顺序
++ > * > +=
此处*p+=1
正在增加p
指向的值。这里p
指向的内存位置的值递增。您可以在代码中看到更改。
在第二种情况下,*p++
它只是增加指针p
,然后它取消引用该值,但您不会在任何地方分配该r值。这不会改变p
所指向的内存中的实际内容。
这就是为什么在第二种情况下你没有看到工作变量有任何变化,并得出结论认为它不起作用,但肯定不是这样。