为了账号安全,请及时绑定邮箱和手机立即绑定

指针表达式:* ptr ++,* ++ ptr和++ * ptr

指针表达式:* ptr ++,* ++ ptr和++ * ptr

C++ C
米脂 2019-09-18 14:41:16
最近我遇到了这个我自己无法理解的问题。这三个表达式真正意味着什么?*ptr++*++ptr++*ptr我试过里奇。但不幸的是,他无法按照他讲述的这三项行动。我知道它们都是为了递增指针/指向的值而执行的。我还可以猜测可能有很多关于优先级和评估顺序的事情。就像一个指针首先递增指针然后取出指针的内容,一个简单地取出内容然后递增指针等等。正如你所看到的,我对他们的实际操作我没有清楚的理解,我想尽快明确。但是当我有机会将它们应用到程序中时,我真的迷失了。例如:int main(){    const char *p = "Hello";    while(*p++)         printf("%c",*p);    return 0;}给我这个输出:ello但我的期望是它会印刷Hello。最后一个请求 - 请给出一些示例,说明每个表达式在给定的代码段中的工作原理。因为大多数时候只有一段理论飞过我的脑海。
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

假设ptr指向数组的第i个元素arr。


*ptr++求值arr[i]并设置ptr为指向的第(i + 1)个元素arr。它相当于*(ptr++)。


*++ptr设置ptr为指向的第(i + 1)个元素arr并进行求值arr[i+1]。它相当于*(++ptr)。


++*ptr增加arr[i]1并评估其增加的价值; 指针ptr保持不变。它相当于++(*ptr)。


还有一个,但你需要括号来写它:


(*ptr)++增加arr[i]1并在增加之前评估其值; 指针ptr再次保持不变。

其余的你可以弄清楚自己; @Jaguar也回答了这个问题。


查看完整回答
反对 回复 2019-09-18
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

*ptr++ : post increment a pointer ptr


*++ptr : Pre Increment a pointer ptr


++*ptr : preincrement the value at ptr location


阅读此处有关预增量和后增量运算符的信息


这将  Hello作为输出


int main()

{

    const char *p = "Hello";

    while(*p)

         printf("%c",*p++);//Increment the pointer here 

    return 0;

}


查看完整回答
反对 回复 2019-09-18
  • 3 回答
  • 0 关注
  • 1289 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信