1

我想知道,为什么会这样:

*some_var++;

不做同样的事情:

*some_var = *some_var + 1;

...是因为在第二个示例中,<*> 解引用运算符被用于两个不同的目的吗?

*some_var = *some_var + 1;

也就是说:*some_var的第一个实例正在设置&some_var的内容,而*some_var的第二个实例正在调用&some_var的当前内容?...这是 C 不能用以下语句做出的区别:*some_var++; ?

此外,是否:

*some_var++;

做任何事,如果是,怎么办?!

感谢您的任何意见......也许是一件微不足道的事情,但我仍然很好奇。

4

2 回答 2

7
*some_var++;

相当于

*(some_var++);

并且不等同于:

(*some_var)++;

++后缀运算符的优先级高于*一元运算符。

顺便说一句,由于您在语句中不使用*运算符的值,因此*some_var++;语句也等效于some_var++;(假设some_var不是指向volatile对象的指针)。

于 2013-01-06T21:37:54.330 回答
0

请参阅以下示例:

ex: 1

int main()
{
  char *ptr = "stackoverflow";
  *ptr++;
  printf ("%s\n", ptr);//this will print "tackoverflow" i.e pointr is incremented.
  return 0;
}

ex:2

int main()
{
   char *ptr = "stackoverflow";
   *ptr = *ptr + 1;// here you are trying to assing incremented content to *ptr, but this will give you error because string literal "stackoverflow" is stored in the read only memory so you can't modify .
}
于 2013-01-07T07:46:26.203 回答