C: 使用带有++/-的指针更新内存地址内容



我想知道,为什么:

*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++;

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

感谢您的意见。。。也许是一件小事,但我还是很好奇。

*some_var++;

相当于

*(some_var++);

不等同于:

(*some_var)++;

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

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

请参阅以下示例:

ex: 1
int main()
{
  char *ptr = "stackoverflow";
  *ptr++;
  printf ("%sn", 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 .
}

最新更新